淺談在React中使用Redux數據流(三)

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一般和業務緊密相連,因此不是那麼容易被複用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章