美文网首页
如何重置Redux存储的状态?

如何重置Redux存储的状态?

作者: 日不落000 | 来源:发表于2018-12-25 13:47 被阅读186次

参考 http://www.coderlord.com/javascript/5/6/7/6540DE35624567.html

关键代码

我想指出Dan Abramov接受的评论是正确的,除非我们在使用react-router-redux软件包以及这种方法
时遇到了一个奇怪的问题。我们的修复方法是不将状态设置为undefined但是而是仍然使用当前的路由
减少器。所以如果你使用这个包,我建议你实施下面的解决方案


const rootReducer = (state, action) => {
  if (action.type === 'USER_LOGOUT') {
    const { routing } = state
    state = { routing } 
  }
  return appReducer(state, action)
}

应用场景:
用户退出登录,情况相关缓存数据。

问题:
我使用Redux进行状态管理。
如何将存储重置为其初始状态?
例如,假设我有两个用户帐户(u1和u2)。
想象以下事件序列:

用户u1登录到应用程序并执行某些操作,因此我们在存储中缓存一些数据。
用户u1注销。
用户u2登录到应用程序,而不刷新浏览器。

在这一点上,缓存的数据将与u1关联,我想清理它。

当第一个用户注销时,如何将Redux存储重置为其初始状态?

最佳答案:
一种方法是用手写一个根reducer。

根reducer通常委托处理由combineReducers()生成的reducer的动作。但是,每当它接收到USER_LOGOUT操作时,它就会重新返回初始状态。

例如,如果你的root reducer看起来像这样:

const rootReducer = combineReducers({
  /* your app’s top-level reducers */
})

你可以将它重命名为appReducer并写一个新的rootReducer委托给它:

const appReducer = combineReducers({
  /* your app’s top-level reducers */
})

const rootReducer = (state, action) => {
  return appReducer(state, action)
}

现在我们只需要教新的rootReducer在USER_LOGOUT操作后返回初始状态。正如我们知道的,reducers应该返回初始状态,当它们以undefined作为第一个参数被调用时,不管操作。让我们使用这个事实有条件地剥离累积状态,我们将它传递给appReducer:

 const rootReducer = (state, action) => {
  if (action.type === 'USER_LOGOUT') {
    state = undefined
  }

  return appReducer(state, action)
}

现在,每当USER_LOGOUT触发时,所有reducers都将重新初始化。他们也可以返回不同于他们最初想要的东西,因为他们可以检查action.type以及。

重申,全新的代码如下所示:

const appReducer = combineReducers({
  /* your app’s top-level reducers */
})

const rootReducer = (state, action) => {
  if (action.type === 'USER_LOGOUT') {
    state = undefined
  }

  return appReducer(state, action)
}

注意,我不是在这里改变状态,我只是reassigning the reference的一个局部变量,称为状态,然后传递给另一个函数。改变状态对象将违反Redux原则。

翻译自:https://stackoverflow.com/questions/35622588/how-to-reset-the-state-of-a-redux-store
转载注明原文:javascript – 如何重置Redux存储的状态?

相关文章

  • 如何重置Redux存储的状态?

    参考 http://www.coderlord.com/javascript/5/6/7/6540DE356245...

  • 浅析redux-persist

    之前在项目中遇到redux的数据持久化问题,当页面刷新时,redux中存储的状态会重置,导致之前的操作无效,这要是...

  • 前端知识 | Redux的使用

    什么是 Redux? Redux 是整个项目的状态管理中心,数据存储仓库,集中式的存储和管理所有的组件的状态,并且...

  • redux 浅析

    什么是 Redux Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 Redux 是如何工...

  • 手拉手学React:Redux

    redux中文网 何为Redux Redux 是 JavaScript 状态容器,用来存储项目中一些公共的数据,做...

  • Unity保存与加载

    1、创建Save对象并存储当前游戏状态信息 2、通过读档信息重置我们的游戏状态(分数、激活状态的怪物) 3、存储:...

  • React - Redux实践

    Redux 是什么? Redux的状态容器Store存储着所有的状态数据,每个状态都与视图一一对应。一个State...

  • redux-persist

    前端应用,状态信息可以存储在: 1 应用内部(eg:state 、redux) 2 URL 3 缓存(localS...

  • React通过redux-persist持久化数据存储

    在React项目中,我们经常会通过redux以及react-redux来存储和管理全局数据。但是通过redux存储...

  • 如何使用redux

    1. redux如何使用Redux是一个状态管理工具,在react-redux中有一个顶层组件Provider,里...

网友评论

      本文标题:如何重置Redux存储的状态?

      本文链接:https://www.haomeiwen.com/subject/cbhflqtx.html