Redux原碼解析
redux導出的api:包括createStore,combineReducers,以及store的dispatch,getState,subscribe等。
createStore
createStore函數(shù)接受reducer,preloadedState,enhancer三個參數(shù),preloadedState和enhancer是可選參數(shù)。返回store對象,store對象具有dispatch,getState,subscribe等方法。這里運用了閉包,因此通過導出的store對象方法訪問狀態(tài)。
combineReducer
combineReducer接受一個由多個reducer組成的對象,然后返回一個reducer函數(shù),這個reducer函數(shù)的簽名和普通reducer一樣,而在內部則是依次調用reducerMapObject里所有reducer更新狀態(tài)。
bindActionCreator
此方法在react-redux的mapDispatchToProps里運用較多。作用是將actionCreator函數(shù)轉化成dispatch形式
applyMiddleware
applyMiddleware接受中間件,返回storeenhancer。是一個高階函數(shù),這里有點繞,但是作用是將middleware和基礎的dispatch compose起來,作為store的dispatch函數(shù)。
middleware舉例- redux-thunk源碼
當使用了redux-thunk中間后,增強的dispatch接受actionCreator后優(yōu)先走action==function的分支,因此也就是調用actionCreator函數(shù)并且傳入dispatch,getState等參數(shù),當actionCreator的異步操作結束后調用dispatch,這次傳參是對象,就走next分支,也就是基本的dispatch功能。