1、react-redux項目結構
幾個文件和文件夾:
1) actions:存放Action,用戶的行爲;
2) components:展示組件;
3) containers:容器組件;
4) reducers:Store裏負責分發用戶的行爲,根據不同的行爲作出不同的響應
5) index.html:母版文件,最終最頂層的組件需要渲染到一個DOM節點上,這需要一個HTML模板來實現,這個模板放在index.html中;
6) index.js:項目的跟入口文件;
7) server.js:把真個該項目跑起來,包括對其的構建;
8) webpack:需要一個webpack的打包配置文件。
2、action
1) action是行爲的抽象;
2) action是一個普通的JS對象,就是一個Object;
3) action必須要有一個type,type是唯一的;
4) action一般由方法來生成。
3、reducer
1) reducer是響應的抽象;
2) reducer必須是一個純方法,也就是可以完全根據輸入得到輸出(非純方法可能依賴當前時間、系統狀態等);
3) reducer傳入的是舊狀態和action,返回新狀態。
4、store
1) action其實不是直接作用於reducer,而是作用於store上;
2) reducer其實是根據store來作出響應,store其實是state加上reducer的混合體,也就是數據和狀態的存儲;
3) store是唯一的,也就是唯一狀態樹;
4) store包括了完整的state,也即項目的整個狀態;
5) store完全可預測,也即能想象到發生不同action時state將發生什麼樣的變化。
5、組件:
React寫的都是組件,但引入數據流以後,把組件分成兩類:一類是container,另一類是component。
|
container |
component |
目的 |
如何工作(如何獲取數據,狀態如何更新) |
如何顯示(樣式,佈局) |
是否在Redux數據流中 |
是,Redux知道container存在,因爲reducer根據用戶的action決定如何響應後,就是作用於container上的 |
否,Redux並不知道component存在 |
讀取數據 |
從Redux獲取state,即當行爲導致store發生變化時,舊的state加上action得到新的state,container讀取新的state決定自己怎麼變化 |
只能從props獲取數據,數據都是其父組件提供的 |
修改數據 |
向Redux派發actions |
只能是父組件給其props傳遞一個回調函數,component只是從props調用回調函數 |
實現方式 |
由react-redux生成 |
手寫 |
補充:component與數據流向無關,只是負責顯示,負責佈局和樣式,因此非常容易被複用,而container一般和業務緊密相連,因此不是那麼容易被複用。