使 Redux 减速器和其他非组件可热加载

Make Redux reducers and other non-components hot loadable

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

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

我发现这是因为我需要显式地重新加载减速器并接受事件。我在我的 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 获得,您可以通过以下方式重现它:

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

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

的结果

所以

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

你可能想要

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

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