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

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

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

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

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

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

在createStore 中有兩個return .
第一個return 是有 中間件 的情況下 直接使用applymiddleware(enhancer)處理createStore 然后傳入 reducer 和 state. 導致 在dipatch 之前都會觸發(fā) 中間件.
第二個 return 是在沒有中間件的情況下返回一串方法,下面一個一個說:
1. observable redux 里面的訂閱發(fā)布.這個用的比較少,調(diào)用他,會返回一個$$observable對象和subscribe方法給你使用.
2.replaceReducer,這個用的也挺少,替換reducer 然后初始化一下.

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

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

做了二件事情: 1. 使用reducer 觸發(fā)action? 2. 執(zhí)行所有的listener 最后返回action.
至此 redux 全部的源碼已經(jīng)過了一遍了.最后總結(jié)一下redux完整的流程.