在開發(fā)一個(gè)RN工程中矾芙,目前常用的開發(fā)架構(gòu):React+Redux灵临;
看了多個(gè)開源項(xiàng)目后呢诬,自我感覺下面的目錄架構(gòu)還是比較經(jīng)典的:
為什么選擇redux的框架:
背景:
RN的state(可變致扯,子組件不可見)和props(不可變鼻吮,子組件可見)的設(shè)計(jì),在面對(duì)大型項(xiàng)目時(shí)候筹裕,容易因?yàn)椴唤?jīng)意修改state造成狀態(tài)混亂醋闭,組件渲染錯(cuò)誤
RN使用了Virtual DOM,不需要Target綁定->Action修改UI屬性朝卒,只要當(dāng)狀態(tài)變化证逻,render新狀態(tài)下的組件,數(shù)據(jù)單向傳遞抗斤,而MVC的設(shè)計(jì)模式存在雙向數(shù)據(jù)流囚企。
RN不易進(jìn)行測(cè)試,Redux提供了非常方便的mock測(cè)試方式瑞眼。
Redux開發(fā)
開發(fā)環(huán)境
安裝Redux: ‘npm install –save redux'
安裝React Native和Redux綁定庫(kù):npm install –save react-redux
安裝Redux Thunk異步Action中間件:npm install –save redux-thunk
三個(gè)原則
單一數(shù)據(jù)源
整個(gè)應(yīng)用的 state 被儲(chǔ)存在一個(gè)對(duì)象樹中龙宏,對(duì)象樹存在于唯一的 store 中。store中的 state 綁定到組件
State 是只讀的
惟一改變 state 的方法就是觸發(fā) action伤疙。action 是一個(gè)含有 type 屬性的普通JS對(duì)象银酗,type 可以用常量表示事件。
使用純函數(shù)來執(zhí)行修改
編寫 reducers 來描述對(duì)應(yīng)action如何修改 state 徒像。一般可以用 switch(action.type) 來處理黍特,無副作用
使用
react-redux提供了connect和Provider。
1.Provider是頂層的分發(fā)點(diǎn)锯蛀,屬性就是Store衅澈,將State分發(fā)給所有被connect的組件
2.connect:接受兩個(gè)參數(shù):一個(gè)是mapStateToProps或者mapDispatchToProps,一個(gè)是要綁定的組件本身谬墙。
Store
Store 就是把 Reducer 和 action 聯(lián)系到一起的對(duì)象。Store 有以下職責(zé):
維持應(yīng)用的 state–類似數(shù)據(jù)庫(kù)经备,存儲(chǔ)應(yīng)用的所有state拭抬。
提供 getState() 方法。獲取 所有的當(dāng)前state侵蒙;
提供 dispatch(action) 方法更新 state造虎,相當(dāng)于存入數(shù)據(jù)庫(kù),存入action來改變state纷闺。
通過 subscribe(listener) 注冊(cè)監(jiān)聽器算凿。
Store本質(zhì)上是一個(gè)對(duì)象,它以樹的形式保存了整個(gè)應(yīng)用的State犁功。并提供了一些方法氓轰。例如getState( ) 和 dispatch( )。
Redux應(yīng)用只有惟一一個(gè)Store浸卦。
Store通過createStore方法來創(chuàng)建署鸡,根據(jù)整個(gè)應(yīng)用的根Reducer的初始State。