2017-09-13 101 views
0

任何人都可以幫我用正確的redux store配置嗎?不能應用多個使用Redux的中間件applyMiddleware函數

我想配置如下,

configureStore.js

import thunk from 'redux-thunk'; 
import logger from 'redux-logger'; 
import { createStore, applyMiddleware } from 'redux'; 
import rootReducer from '../reducers'; 

let middlewares = [thunk, logger] 

const configureStore =() => { 
    const store = createStore(
    rootReducer, 
    applyMiddleware(...middlewares) // I also tried with applyMiddleware(thunk, logger) 
); 

    return store; 
} 

export default configureStore; 

我導入此模塊主要js文件和使用方法如下,

index.js

import configureStore from '../stores/configureStore'; 

const store = configureStore(); 

// And other DOM render code follows... 

但似乎是不工作,在Web控制檯中顯示以下錯誤,

錯誤:未捕獲的類型錯誤:WEBPACK_IMPORTED_MODULE_0__compose .a.apply(...)不是一個函數

Error

文件中的錯誤是: enter image description here

我下面的reduxredux-thunkredux-logger卻無力官方的文檔使其工作。

另一個注意事項:當我從中間件列表中刪除thunklogger中的任何一個時,它工作正常。

UPDATE: I got temporary fix

降級從3.7.2redux3.5.2工作正常。

我還想知道爲什麼它是最新版本的Redux的問題。我試圖添加更多與該問題相關的信息並尋找未來升級的解決方案。

謝謝!

+0

我注意到''rootReducer'在configureStore.js中使用,但從未定義或導入。這是問題嗎?或者你是否把它從這個例子中排除了? –

+0

rootReducer已定義。 –

回答

0

你剛剛犯了一個小錯誤。

從官方docs,這裏是createStore的簽名:

createStore(reducer, [preloadedState], [enhancer]) 

你混在一起的參數的順序,通過你的增強功能(applyMiddleware),其中功能期待preloadedState。您需要在rootReducer和applyMiddleware函數之間傳遞參數以滿足簽名。

希望這有助於!

+1

'createStore' _does_實際上支持將增強器作爲第二個參數傳遞,而不是'preloadedState'。 – markerikson

+0

不幸。我嘗試傳遞默認狀態對象作爲第二個參數。我認爲@markerikson是對的 –

相關問題