当前位置:  开发笔记 > 运维 > 正文

Redux - 如何在热重载期间保持reducer状态

如何解决《Redux-如何在热重载期间保持reducer状态》经验,为你挑选了1个好方法。

我使用 React + Redux + Webpack + WebpackDevserver.一旦热启动器启动,我的所有减速器都将重置为初始状态.

我能以某种方式保持我的减速器处于实际状态吗?

我的Webpack配置包含:

entry: [
    "./index.jsx"
],
output: {
    filename: "./bundle.js"
},
module: {
    loaders: [
        {
            test: /\.js|\.jsx$/,
            exclude: /node_modules/,
            loaders: ["react-hot","babel-loader"],
         }
    ]
},
plugins: [
    new webpack.HotModuleReplacementPlugin()
]

我的减速器统计数据:

const initialState = {
...
}

export default function config(state = initialState, action) { ...

我只是通过以下方式启动我的Webpack Dev-Server:

"start": "webpack-dev-server",

Juho Vepsälä.. 15

假设Babel 6,你需要做一些事情:

import {createStore} from 'redux';
import rootReducer from '../reducers';

export default function configureStore(initialState) {
  const store = createStore(rootReducer, initialState);

  if(module.hot) {
    // Enable Webpack hot module replacement for reducers
    module.hot.accept('../reducers', () => {
      const nextReducer = require('../reducers/index').default;

      store.replaceReducer(nextReducer);
    });
  }

  return store;
}

您可以在我的redux演示中看到该方法的实际应用.



1> Juho Vepsälä..:

假设Babel 6,你需要做一些事情:

import {createStore} from 'redux';
import rootReducer from '../reducers';

export default function configureStore(initialState) {
  const store = createStore(rootReducer, initialState);

  if(module.hot) {
    // Enable Webpack hot module replacement for reducers
    module.hot.accept('../reducers', () => {
      const nextReducer = require('../reducers/index').default;

      store.replaceReducer(nextReducer);
    });
  }

  return store;
}

您可以在我的redux演示中看到该方法的实际应用.


容器和组件可以通过[react-hot-loader](https://github.com/gaearon/react-hot-loader).不过,这是一项实验性技术.问题仅限于减速器,这就是为什么答案有限.
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有