簡要介紹:再看redux文檔的時候,發現了createStore是允許第三個參數的,看了一下源碼明白了第三個參數的作用。
一、createStore的第三個參數的定義
(1)官方定義:createStore(reducer, [initialState], enhancer),
第三個參數enhancer, 是一個組合 store creator 的高階函數,返回一個
新的強化過的 store creator。這與 middleware 相似,它也允許你通過
複合函數改變 store 接口。
(2)關於第三個參數的源碼:
export default function createStore(reducer, preloadedState, enhancer) {
if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {
enhancer = preloadedState
preloadedState = undefined
}
if (typeof enhancer !== 'undefined') {
if (typeof enhancer !== 'function') {
throw new Error('Expected the enhancer to be a function.')
}
return enhancer(createStore)(reducer, preloadedState)
}
去掉前面一些類型判斷,我們來看這一句:
return enhancer(createStore)(reducer, preloadedState)
這句的形式像什麼,柯里化後傳入的第一個參數爲createStore,這很類
似於我們再定義中間件的時候,applyMiddleware這個函數,這個函數
返回了提升後的createStore。
二、applyMiddleware的兩種寫法
因此在applyMiddleware的時候,就會存在兩種寫法,這裏我們以利用redux-thunk爲例。
(1)直接調用applyMiddleware生成新的createStore
import thunk from 'redux-thunk'
let createStoreWithMiddleware = applyMiddleware(thunk)(createStore)
(2)在createStore中調用
import thunk from 'redux-thunk'
let createStoreWithMiddleware = createStore(reducer,preState,applyMiddleware(thunk))