Redux源碼拾遺,關於createStore的第三個參數

簡要介紹:再看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))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章