使 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 获得,您可以通过以下方式重现它:
npm install
npm start
- 在浏览器中打开 localhost:3000
- 编辑减速器 - 打开
posts.js
并将第 6 行的数字更改为其他任何内容
我没有仔细看,但我最好的猜测是 this issue。
Babel 6 不再尝试让 ES6 默认导出 module.exports
.
的结果
所以
const nextRootReducer = require('./reducers/index');
你可能想要
const nextRootReducer = require('./reducers/index').default;
与 ES6 默认导出的 Babel 6 输出匹配。
我很难让我的减速器可以热插拔。
我正在使用 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 获得,您可以通过以下方式重现它:
npm install
npm start
- 在浏览器中打开 localhost:3000
- 编辑减速器 - 打开
posts.js
并将第 6 行的数字更改为其他任何内容
我没有仔细看,但我最好的猜测是 this issue。
Babel 6 不再尝试让 ES6 默认导出 module.exports
.
所以
const nextRootReducer = require('./reducers/index');
你可能想要
const nextRootReducer = require('./reducers/index').default;
与 ES6 默认导出的 Babel 6 输出匹配。