創(chuàng)建 store?
定義 action?
出發(fā)reducer
compose(...functions)
從右到左來(lái)組合多個(gè)函數(shù)。
compose(...functions)
從右到左來(lái)組合多個(gè)函數(shù)。
這是函數(shù)式編程中的方法,為了方便,被放到了 Redux 里。
當(dāng)需要把多個(gè)store 增強(qiáng)器依次執(zhí)行的時(shí)候,需要用到它。
參數(shù)
(arguments): 需要合成的多個(gè)函數(shù)。預(yù)計(jì)每個(gè)函數(shù)都接收一個(gè)參數(shù)。它的返回值將作為一個(gè)參數(shù)提供給它左邊的函數(shù),以此類推。例外是最右邊的參數(shù)可以接受多個(gè)參數(shù),因?yàn)樗鼘橛纱水a(chǎn)生的函數(shù)提供簽名。(譯者注:compose(funcA,funcB,funcC)形象為compose(funcA(funcB(funcC()))))
返回值
(Function): 從右到左把接收到的函數(shù)合成后的最終函數(shù)。
createStore(reducer,[preloadedState],enhancer)
創(chuàng)建一個(gè) Reduxstore來(lái)以存放應(yīng)用中所有的 state。
應(yīng)用中應(yīng)有且僅有一個(gè) store。
參數(shù)
reducer(Function): 接收兩個(gè)參數(shù),分別是當(dāng)前的 state 樹(shù)和要處理的action,返回新的state 樹(shù)。
[preloadedState](any): 初始時(shí)的 state。 在同構(gòu)應(yīng)用中,你可以決定是否把服務(wù)端傳來(lái)的 state 水合(hydrate)后傳給它,或者從之前保存的用戶會(huì)話中恢復(fù)一個(gè)傳給它。如果你使用combineReducers創(chuàng)建reducer,它必須是一個(gè)普通對(duì)象,與傳入的 keys 保持同樣的結(jié)構(gòu)。否則,你可以自由傳入任何reducer可理解的內(nèi)容。
enhancer(Function): Store enhancer 是一個(gè)組合 store creator 的高階函數(shù),返回一個(gè)新的強(qiáng)化過(guò)的 store creator。這與 middleware 相似,它也允許你通過(guò)復(fù)合函數(shù)改變 store 接口。
返回值
(Store): 保存了應(yīng)用所有 state 的對(duì)象。改變 state 的惟一方法是dispatchaction。你也可以subscribe 監(jiān)聽(tīng)state 的變化,然后更新 UI。
從react-redux導(dǎo)入Prodiver組件將store賦予Provider的store屬性,
=================================================
redux中有三個(gè)基本概念,Action,Reducer,Store。
Action 作用。
1、用Action來(lái)分辨具體的執(zhí)行動(dòng)作。比如我是要添加一個(gè)項(xiàng)目還是刪除一個(gè)項(xiàng)目。
2、操作數(shù)據(jù)首先得有數(shù)據(jù)。比如添加數(shù)據(jù)得有數(shù)據(jù),刪除數(shù)據(jù)得有ID。action就是存這些數(shù)據(jù)的地方。
3、不帶其他數(shù)據(jù),僅僅啟示已有數(shù)據(jù)需要如何調(diào)整,或者需要主動(dòng)獲取哪些數(shù)據(jù)。如果我要?jiǎng)h除掉全部數(shù)據(jù),只要告知這件事即可
Reducer的作用:
官方描述:Action 只是描述了有事情發(fā)生了這一事實(shí),并沒(méi)有指明應(yīng)用如何更新 state。這是 reducer 要做的事情。
這么說(shuō)吧,Action就像一個(gè)指揮者,告訴我們應(yīng)該做哪些事,比如我要?jiǎng)h除,reducer就會(huì)給我們提供‘資源(就是上面說(shuō)的數(shù)據(jù))’,真正的體力勞動(dòng)者是reducer。
也就是說(shuō),action里面的每一種描述,比如新增啦,刪除一個(gè),刪除全部啦,reducer都有一個(gè)對(duì)應(yīng)的函數(shù)來(lái)處理數(shù)據(jù)。之后返回給你一個(gè)新的state
reducer 只是一個(gè)模式匹配的東西,真正處理數(shù)據(jù)的函數(shù),是額外在別的地方寫(xiě)的,在 reducer 中調(diào)用罷了。
Store:
前面兩個(gè),我們知道使用 action 來(lái)描述“發(fā)生了什么”,和使用 reducers 來(lái)根據(jù) action 更新 state 的用法。
Store 就是把它們聯(lián)系到一起的對(duì)象。Store 有以下職責(zé):
維持應(yīng)用的 state;
提供 getState() 方法獲取 state;
提供 dispatch(action) 方法更新 state;
通過(guò) subscribe(listener) 注冊(cè)監(jiān)聽(tīng)器
就是說(shuō),將action和reducer聯(lián)系在一起的是store。
這一點(diǎn)要和flux的store是有區(qū)別的,flux的store是數(shù)據(jù)工廠,所有的數(shù)據(jù)操作都在store那里執(zhí)行,而且flux的store可以有多個(gè)。
redux中,數(shù)據(jù)工廠在reducer這里,而不是在store這里。store有且只有一個(gè),切記?。。。?/b>
如果你前面學(xué)習(xí)了flux,再學(xué)習(xí)redux其實(shí)是有一點(diǎn)小困惑的。通過(guò)Reducer修改數(shù)據(jù)給我們帶來(lái)了哪些好處?
主要有兩點(diǎn):
1、數(shù)據(jù)拆解
2、數(shù)據(jù)不可變(immutabilit
一個(gè)reducer對(duì)應(yīng)一個(gè)state;然后通過(guò)combineReducers將多個(gè)state合并成了一個(gè)大的state對(duì)象; React-Redux 提供Provider組件;并設(shè)置參數(shù)store,可以讓容器組件的connect方法拿到store。