首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反应样板拯救地方政府

反应样板拯救地方政府
EN

Stack Overflow用户
提问于 2017-07-24 06:33:42
回答 1查看 620关注 0票数 1

使用https://github.com/react-boilerplate/react-boilerplate v3.4.0,我希望在用户单击刷新按钮时保持状态元素。

我所做的:在app.js中,我改变了const initialState = {}; const store = configureStore(initialState, browserHistory);

至:

代码语言:javascript
复制
const initialState = loadState();
const store = configureStore(initialState, browserHistory);

其中persist.js用于持久化state.global:

代码语言:javascript
复制
export const loadState = () => {
  try {
     const serializedState = localStorage.getItem('state');
     if (serializedState === null) {
       return undefined;
     }
     return JSON.parse(serializedState);
  } catch (err) {
    return undefined;
  }
};

export const saveState = (state) => {
  try {
     const serializedState = JSON.stringify({ global: state.get('global').toJS()});
     localStorage.setItem('state', serializedState);
  } catch (err) {
     console.log(err);
  }
};

在返回存储前的默认store.js中,我添加了以下内容:

代码语言:javascript
复制
  store.subscribe(() => {
    saveState(store.getState());
  });

显然,这可以通过以后的节流来改进。

因此,所发生的事情是在我验证了状态后,状态正确地持久化到本地存储,并且它被正确地从本地存储重新加载。

在身份验证之后刷新页面时,我开始跟踪store.js:

在运行createStore之前,初始化状态是:

跑完后:

代码语言:javascript
复制
  const store = createStore(
    createReducer(),
    fromJS(initialState),
    composeEnhancers(...enhancers)
 );

store.getState()返回:

所以它所做的就是从减速器的初始状态取值。我不明白为什么会发生这种情况,因为redux文档声明:

您可以选择将初始状态指定为createStore()的第二个参数。这对于补充客户端的状态以匹配服务器上运行的Redux应用程序的状态非常有用。

因此,我的问题是,在屏幕刷新之后,如何使状态保持不变,以及为什么初始状态被减法器覆盖?

EN

回答 1

Stack Overflow用户

发布于 2017-07-25 11:44:38

结果,我的还原器中有一个错误--返回的是初始值,而不是默认操作的状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45274009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档