2016-06-28 41 views
17

當我爲Chrome擴展添加中間件時,減速器在現場停止正常工作(但是chrome/redux調試工具起作用)+在控制檯中出現以下錯誤:Redux:減速器接收到的上一個狀態具有意想不到的「功能」類型

減速機接收到的上一個狀態具有意外的「功能」類型。預計參數與以下鍵的對象: 「身份驗證」, 「普通」, 「家」

這裏是代碼:

import { applyMiddleware, createStore } from 'redux'; 
import { promiseMiddleware, localStorageMiddleware } from './middleware'; 
import reducer from './reducer'; 

const middleware = applyMiddleware(promiseMiddleware, localStorageMiddleware); 

const store = createStore(reducer, middleware, 
     window.devToolsExtension ? window.devToolsExtension() : f => f); 

export default store; 

如果我刪除的鍍鉻部分:

,window.devToolsExtension ? window.devToolsExtension() : f => f 

如果再次正常工作。

+0

正如錯誤所述,您需要查看reducer,因此如果您提供了reducer代碼將會很有幫助。 –

回答

35

createStore最多需要3個參數。如果第二個參數是一個函數,它假定你的第二個參數是存儲增強器。如果它是一個對象或有3個參數它假定參數是您的初始狀態。見here

中間件變量是一個商店增強劑和Chrome擴展也增強:

window.devToolsExtension ? window.devToolsExtension() : f => f 

你無論是在一個單一的功能組成:

import { applyMiddleware, createStore, compose } from 'redux'; 
import { promiseMiddleware, localStorageMiddleware } from './middleware'; 
import reducer from './reducer'; 

const middleware = applyMiddleware(promiseMiddleware, localStorageMiddleware); 

const store = createStore(
    reducer, 
    compose(middleware, window.devToolsExtension ? window.devToolsExtension() : f => f) 
); 

export default store; 

文檔可以發現here

11

createStoreaccepts the following arguments

  • 減速器
  • 預加載狀態
  • 增強劑

如果提供僅兩個參數,第二個參數是一個函數,那麼它被認爲是增強子。請參閱source code

如果你想使用Redux devtools,那麼你應該compose它作爲一個額外的增強。

import { applyMiddleware, createStore, compose } from 'redux'; 

    const store = createStore(
     reducer, 
     compose(
     middleware, 
     window.devToolsExtension ? window.devToolsExtension() : f => f 
    ) 
    ) 

希望有幫助。 Pozdrav

相關問題