2017-09-13 103 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是对的 –

相关问题