【问题标题】:cannot apply multiple middlewares using Redux applyMiddleware function无法使用 Redux applyMiddleware 函数应用多个中间件
【发布时间】:2018-02-22 08:49:15
【问题描述】:

谁能帮助我正确的redux store 配置?

我正在尝试如下配置,

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(...) 不是函数

错误所在的文件:

我正在关注reduxredux-thunkredux-logger 的官方文档,但无法使其正常工作。

另一个注意事项:当我从中间件列表中删除 thunklogger 中的任何一个时,它工作正常。

更新:我得到了临时修复

redux3.7.2 降级到3.5.2 可以正常工作。

我仍然想知道为什么这是最新版本的Redux 的问题。我尝试添加与该问题相关的更多信息,并为未来的升级寻找解决方案。

谢谢!

【问题讨论】:

  • 我注意到 rootReducer 在 configureStore.js 中使用,但从未定义或导入。那是问题吗?还是您只是在示例中忽略了它?
  • rootReducer 已定义。

标签: javascript node.js reactjs redux redux-thunk


【解决方案1】:

你只是犯了一个小错误。

来自官方docs,这里是createStore的签名:

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

您混淆了参数的顺序,将您的增强器函数 (applyMiddleware) 传递到该函数期望预加载状态的位置。您需要在 rootReducer 和 applyMiddleware 函数之间传入一个参数,以满足签名。

希望这有帮助!

【讨论】:

  • createStore 确实实际上支持将增强器作为第二个参数传递,而不是 preloadedState
  • 不走运。我尝试将默认状态对象作为第二个参数传递。我认为@markerikson 是对的
猜你喜欢
  • 2018-03-07
  • 2018-11-10
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 2019-02-04
  • 2019-06-15
相关资源
最近更新 更多