Dva: redux-persist 无法恢复数据

Created on 24 Apr 2017  ·  7Comments  ·  Source: dvajs/dva

系统: macOS 10.12.4
运行环境: Chrome 57.0.2987.133 (64-bit)
问题复现: https://github.com/raininfall/dva-redux-persist-error
主要库版本:

  • dva 1.2.1
  • redux-persist 4.6.0

复现步骤:

  • 按若干次+按钮,是count非1
  • 查看localStorage,确认持久化成功
  • 刷新页面,这是count显示为1

主要代码如下:

import dva, { connect } from 'dva';
import { Router, Route } from 'dva/router';
import { persistStore, autoRehydrate } from 'redux-persist';

// 1. Initialize
const app = dva({
  initialState: { count: 1 },
  extraEnhancers: [autoRehydrate()],
});

// 2. Model
app.model({
  namespace: 'count',
  state: 0,
  reducers: {
    inc(state) {
      return state + 1;
    },
    dec(state) {
      return state - 1;
    },
  },
});

// 3. View
const App = connect(({ count }) => ({
  count,
}))(function (props) {
  return (
    <div>
      <h2>{ props.count }</h2>
      <button onClick={() => props.dispatch({ type: 'count/inc' })}>+</button>
      <button onClick={() => props.dispatch({ type: 'count/dec' })}>-</button>
    </div>
  );
});

// 4. Router
app.router(({ history }) =>
  <Router history={history}>
    <Route path="/" component={App} />
  </Router>
);

// 5. Start
app.start('#root');
persistStore(app._store, {
  whitelist: ['count'],
});

Most helpful comment

@raininfall 我发现把 redux-devtool 关了就好了

All 7 comments

我也遇到这样的问题,有可能是热更新引起的
可以实现一个middleware去拦截REHYDRATE,然后dispatch给各个namespace的save

Same here, cannot see anything rehydrating on refresh...
Any solution?

Thanks

遇到了同样的问题 感觉是persist的reducer没有生效。目前只能手动的去接受REHYDRATE

我下载了你的例子,运行 起来看了,遇到跟你一样的问题
其实关键是不是因为redux认为state是一样的?
states are equal

@raininfall 我发现把 redux-devtool 关了就好了

说明 roadhog 有问题

发生了同样的问题,关掉了redux-devTools插件就OK了,是roadhog有问题还是devtools有问题啊?

Was this page helpful?
0 / 5 - 0 ratings