2018-10-26

1. 使用React腳手架創(chuàng)建一個(gè)React應(yīng)用

1). react腳手架

  1. xxx腳手架: 用來(lái)幫助程序員快速創(chuàng)建一個(gè)基于xxx庫(kù)的模板項(xiàng)目
    • 包含了所有需要的配置
    • 指定好了所有的依賴
    • 可以直接安裝/編譯/運(yùn)行一個(gè)簡(jiǎn)單效果
  2. react提供了一個(gè)專門(mén)用于創(chuàng)建react項(xiàng)目的腳手架庫(kù): create-react-app
  3. 項(xiàng)目的整體技術(shù)架構(gòu)為: react + webpack + es6 + babel + eslint

2). 創(chuàng)建項(xiàng)目并啟動(dòng)

npm install -g create-react-app
create-react-app react-app
cd react-app
npm start
ReactNews
    |--node_modules---第三方依賴模塊文件夾
    |--public
        |-- index.html-----------------主頁(yè)面
    |--scripts
        |-- build.js-------------------build打包引用配置
    |-- start.js-------------------start運(yùn)行引用配置
    |--src------------源碼文件夾
        |--components-----------------react組件
        |--index.js-------------------應(yīng)用入口js
    |--.gitignore------git版本管制忽略的配置
    |--package.json----應(yīng)用包配置文件 
    |--README.md-------應(yīng)用描述說(shuō)明的readme文件

3). 使用腳手架開(kāi)發(fā)的項(xiàng)目的特點(diǎn)

模塊化: js是一個(gè)一個(gè)模塊編寫(xiě)的
組件化: 界面是由多個(gè)組件組合編寫(xiě)實(shí)現(xiàn)的
工程化: 實(shí)現(xiàn)了自動(dòng)構(gòu)建/運(yùn)行/打包的項(xiàng)目

4). 組件化編寫(xiě)項(xiàng)目的流程

拆分組件
實(shí)現(xiàn)靜態(tài)組件--->靜態(tài)頁(yè)面
實(shí)現(xiàn)動(dòng)態(tài)組件
動(dòng)態(tài)顯示初始化數(shù)據(jù)
交互

2. app1: 實(shí)現(xiàn)一個(gè)評(píng)論管理功能

1). 拆分組件:

應(yīng)用組件: App
添加評(píng)論組件: CommentAdd
評(píng)論項(xiàng)組件: CommentItem
評(píng)論列表組件: CommentList

2). 確定組件的state和props:

App:
* state: comments/array
CommentAdd
* state: username/string, content/string
* props: add/func
commentList
* props: comments/array, delete/func
CommentItem
* props: comment/object, delete/func, index/number

3). 編寫(xiě)靜態(tài)組件

拆分頁(yè)面
拆分css

4). 實(shí)現(xiàn)動(dòng)態(tài)組件

  1. 動(dòng)態(tài)展示初始化數(shù)據(jù)
  • 初始化狀態(tài)數(shù)據(jù)
  • 傳遞屬性數(shù)據(jù)
  1. 響應(yīng)用戶操作, 更新組件界面
  • 綁定事件監(jiān)聽(tīng), 并處理
  • 更新state

3. app2: 實(shí)現(xiàn)github用戶搜索功能

1). react應(yīng)用中的ajax請(qǐng)求

axios: 包裝XMLHttpRequest對(duì)象, promise風(fēng)格, 支持瀏覽端/node服務(wù)器端
fetch: 瀏覽器內(nèi)置語(yǔ)法, promise風(fēng)格, 老瀏覽器不支持, 可以引入fetch.js兼容包

2). 拆分組件

App
* state: searchName/string
Search
* props: setSearchName/func
List
* props: searchName/string
* state: firstView/bool, loading/bool, users/array, errMsg/string

3). 編寫(xiě)組件

編寫(xiě)靜態(tài)組件
編寫(xiě)動(dòng)態(tài)組件
componentWillReceiveProps(nextProps): 監(jiān)視接收到新的props, 發(fā)送ajax
使用axios庫(kù)發(fā)送ajax請(qǐng)求

4. 組件間通信總結(jié)

1). 方式一: 通過(guò)props傳遞

共同的數(shù)據(jù)放在父組件上, 特有的數(shù)據(jù)放在自己組件內(nèi)部(state)
一般數(shù)據(jù)-->父組件傳遞數(shù)據(jù)給子組件-->子組件讀取數(shù)據(jù)
函數(shù)數(shù)據(jù)-->子組件傳遞數(shù)據(jù)給父組件-->子組件調(diào)用函數(shù)
問(wèn)題: 多層傳遞屬性麻煩, 兄弟組件通信不方便

2). 方式二: 使用消息訂閱(subscribe)-發(fā)布(publish)機(jī)制: 自定義事件機(jī)制

工具庫(kù): PubSubJS
下載: npm install pubsub-js --save
使用:
import PubSub from 'pubsub-js' //引入
PubSub.subscribe('delete', function(msg, data){ }); //訂閱
PubSub.publish('delete', data) //發(fā)布消息
優(yōu)點(diǎn): 可以支持任意關(guān)系組件之間的通信

3). 事件監(jiān)聽(tīng)理解

  1. DOM事件
    • 綁定事件監(jiān)聽(tīng)
      • 事件名(類型): 只有有限的幾個(gè), 不能隨便寫(xiě)
      • 回調(diào)函數(shù)
    • 用戶操作觸發(fā)事件(event)
      • 事件名(類型)
      • 數(shù)據(jù)
  2. 自定義事件
    • 綁定事件監(jiān)聽(tīng)
      • 事件名(類型): 任意
      • 回調(diào)函數(shù): 通過(guò)形參接收數(shù)據(jù), 在函數(shù)體處理事件
    • 觸發(fā)事件(編碼)
      • 事件名(類型): 與綁定的事件監(jiān)聽(tīng)的事件名一致
      • 數(shù)據(jù): 會(huì)自動(dòng)傳遞給回調(diào)函數(shù)

5. ES6新語(yǔ)法總結(jié)

定義變量/常量: const/let
解構(gòu)賦值: let {a, b} = this.props import {aa} from 'xxx'
對(duì)象的簡(jiǎn)潔表達(dá): {a, b}
箭頭函數(shù):
組件的自定義方法: xxx = () => {}
map/filter的回調(diào)方法: (item, index) => {}
優(yōu)點(diǎn):
* 簡(jiǎn)潔
* 沒(méi)有自己的this,使用引用this查找的是外部this
擴(kuò)展運(yùn)算符: ...
拆解對(duì)象: const MyProps = {}, <Xxx {...MyProps}>
類: class/extends/constructor/super
ES6模塊化: export default | import

6. 項(xiàng)目打包運(yùn)行

npm run build //生成打包文件
npm install -g serve //全局下載服務(wù)器包
serve build //通過(guò)服務(wù)器命令運(yùn)行打包項(xiàng)目
訪問(wèn): http://localhost:5000 //瀏覽器訪問(wèn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末颊艳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子忘分,更是在濱河造成了極大的恐慌,老刑警劉巖白修,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妒峦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡兵睛,警方通過(guò)查閱死者的電腦和手機(jī)肯骇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)窥浪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人笛丙,你說(shuō)我怎么就攤上這事漾脂。” “怎么了胚鸯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵骨稿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我姜钳,道長(zhǎng)坦冠,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任哥桥,我火速辦了婚禮辙浑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拟糕。我一直安慰自己判呕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布送滞。 她就那樣靜靜地躺著侠草,像睡著了一般。 火紅的嫁衣襯著肌膚如雪累澡。 梳的紋絲不亂的頭發(fā)上梦抢,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音愧哟,去河邊找鬼奥吩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蕊梧,可吹牛的內(nèi)容都是我干的霞赫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼肥矢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼端衰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起甘改,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤旅东,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后十艾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體抵代,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年忘嫉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荤牍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片案腺。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖康吵,靈堂內(nèi)的尸體忽然破棺而出劈榨,到底是詐尸還是另有隱情,我是刑警寧澤晦嵌,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布同辣,位于F島的核電站,受9級(jí)特大地震影響耍铜,放射性物質(zhì)發(fā)生泄漏邑闺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一棕兼、第九天 我趴在偏房一處隱蔽的房頂上張望陡舅。 院中可真熱鬧,春花似錦伴挚、人聲如沸靶衍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)颅眶。三九已至,卻和暖如春田弥,著一層夾襖步出監(jiān)牢的瞬間涛酗,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工偷厦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留商叹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓只泼,卻偏偏與公主長(zhǎng)得像剖笙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子请唱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 作為一個(gè)合格的開(kāi)發(fā)者弥咪,不要只滿足于編寫(xiě)了可以運(yùn)行的代碼。而要了解代碼背后的工作原理十绑;不要只滿足于自己的程序...
    六個(gè)周閱讀 8,449評(píng)論 1 33
  • 用兩張圖告訴你聚至,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,734評(píng)論 2 59
  • React.js 小書(shū)學(xué)習(xí) 之 【使用 JSX 描述 UI 信息】 從 JSX 到頁(yè)面 過(guò)程圖解:JSX 到頁(yè)面過(guò)...
    zdlucky閱讀 1,281評(píng)論 0 20
  • 本筆記基于React官方文檔,當(dāng)前React版本號(hào)為15.4.0。 1. 安裝 1.1 嘗試 開(kāi)始之前可以先去co...
    Awey閱讀 7,712評(píng)論 14 128
  • 很久很久以前坦报,有一個(gè)王國(guó)叫觀山國(guó),因?yàn)樗拿姝h(huán)山狂鞋,即使王國(guó)里視力最好的人極目望去也只能看到山壁片择。那山壁如刀削斧劈般陡...
    不完美世界閱讀 527評(píng)論 0 5