redux源碼閱讀筆記

? ? 磚頭搬完了,找點樂趣,記得之前看vuex的源碼.. 挺有意思,沒有記錄..現(xiàn)在忘光光.. 這一年一直寫react,就玩玩redux 源碼吧...


3.72版本

我玩弄的是3.72的版本. 目錄挺清晰的 一個一個來...皮鞭蠟燭準備好...


readme

按照國際慣例,先看看readme, 知道你們不想看, 本屌微微一看,略表心意,大概將了redux'挺屌,run in different environments (client, server, and native) 哪都能用. 下面還給了例子 還有各種文檔廢話..下一個 過!


compose

先弄第一個compose吧, 挑軟的捏...騷呢..兄弟..compose 真是短.. compose就是處理redux中間件的.到底是什么處理的,其實作者在注釋中的return已經(jīng)寫明了? ? ?=》? (...args) => f(g(h(...args))) 使用reduce 把func 從右到左包裹起來以此執(zhí)行.然后就沒有了... so easy ..我以前猜測是用數(shù)組遍歷以此執(zhí)行,果然是我太low??

下一個 applyMiddleware

applyMiddleware

文檔自己對applyMiddleware的解釋是:創(chuàng)建一個能夠執(zhí)行中間件并且dispatch store 的增強型store. 在執(zhí)行action 之前去執(zhí)行一個異步操作或者logger一下.其實就是 (合并中間件) ,并 做了兩件事情:
????第一: 給每個middleware 傳入getState 和 store.dispatch方法.
? ? 第二: 這時候就用到上面將的compose了,對這些middleware依次包裹起來,并且傳入state 方法.

下一個,combineReducers這個沒啥說的,合并reducer

reducer

大家隨便看看 ...繼續(xù)繼續(xù) 昨天晚上沒有弄完,去健身去了,身體一日不如一日啊...下面是createStore


createStore

在createStore 中有兩個return .
第一個return 是有 中間件 的情況下 直接使用applymiddleware(enhancer)處理createStore 然后傳入 reducer 和 state. 導致 在dipatch 之前都會觸發(fā) 中間件.

第二個 return 是在沒有中間件的情況下返回一串方法,下面一個一個說:
1. observable redux 里面的訂閱發(fā)布.這個用的比較少,調(diào)用他,會返回一個$$observable對象和subscribe方法給你使用.
2.replaceReducer,這個用的也挺少,替換reducer 然后初始化一下.

replaceReducer

3.getState,直接返回當前的state.
4.subscribe,訂閱監(jiān)聽函數(shù).


subscribe

做了三件

? ? * 判斷 前后 listener 是否相同. 這個地方不太明白為啥要做這一步,其實不做也可以吧...其實不可以..這段我看了很長時間才明白,這段要結(jié)合dispatch方法一起看, 因為每次dispatch 的時候會遍歷一遍listeners,這一步可以保證拿到的是當前的listener.
? ? * push一個listener?
? ? * 返回一個取消訂閱

5.dispatch 函數(shù)

dipatch

做了二件事情: 1. 使用reducer 觸發(fā)action? 2. 執(zhí)行所有的listener 最后返回action.

至此 redux 全部的源碼已經(jīng)過了一遍了.最后總結(jié)一下redux完整的流程.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容