使 Redux reducer 和其他非组件可热加载

Posted

技术标签:

【中文标题】使 Redux reducer 和其他非组件可热加载【英文标题】:Make Redux reducers and other non-components hot loadable 【发布时间】:2016-03-18 13:19:56 【问题描述】:

我很难让我的减速器可热插拔。

我正在使用 Webpack 和 react-transform-hmr。有了这个,当我保存时,所有的 CSS 和组件都是热加载的,但是当我尝试处理另一种类型时 - 最明显的是 reducer - 它会告诉我进行完全刷新。

我发现这是因为我需要明确地重新加载减速器并接受事件。我在store.js 中使用此代码:

if(module.hot) 
  module.hot.accept('./reducers/', () => 
    const nextRootReducer = require('./reducers/index');
    store.replaceReducer(nextRootReducer);
  );

reducers/index 导出根减速器。

但是现在当我运行它时,它仍然告诉我 [HMR] Cannot check for update (Full reload needed 并且还有错误说 [HMR] TypeError: currentReducer is not a function

所以 - 我需要一些帮助才能让它工作。该代码可在https://github.com/wesbos/Simple-Redux 获得,您可以通过以下方式重现它:

    npm install npm start 在浏览器中打开 localhost:3000 编辑减速器 - 打开 posts.js 并将第 6 行的数字更改为其他任何值

【问题讨论】:

【参考方案1】:

我没有仔细看,但我最好的猜测是它是this issue。 Babel 6 不再尝试让 ES6 默认导出 module.exports 的结果。

所以不是

const nextRootReducer = require('./reducers/index');

你可能想要

const nextRootReducer = require('./reducers/index').default;

与 ES6 默认导出的 Babel 6 输出相匹配。

【讨论】:

就是这样-谢谢!

以上是关于使 Redux reducer 和其他非组件可热加载的主要内容,如果未能解决你的问题,请参考以下文章

手动实现redux

React + Redux:reducer 不会重新加载组件

reducer.state.props 在嵌套动作 react/redux 中未定义

在 redux 中使用样板动作和 reducer

动态生成 Redux Reducer

使用通用动作和减速器简化 redux