如何清除#ngrx 中的状态?
Posted
技术标签:
【中文标题】如何清除#ngrx 中的状态?【英文标题】:How to clear State in the #ngrx? 【发布时间】:2016-12-12 03:26:36 【问题描述】:我正在使用 Ngrx 和 Angular2 构建一个移动应用程序。当用户从我的应用程序中注销时,我想清除商店?有谁知道怎么做?
【问题讨论】:
【参考方案1】:您应该在每个 reducer 中都有一个明确的操作,这将清理商店中的相应属性。当您调用 logout
时,手动在每个减速器中分派清除操作。我现在不确定是否可以一次性清理整个商店。
替代方案:
一个更清洁和更快的方法将是。每当您通过store.dispatch
调用操作时,它都会使用action.type
调用所有reducer。假设你的动作类型名称是CLEAR
,把这个动作放在你的每个reducer中以清除商店的相应属性。并调用store.dispatch
和action.type = 'CLEAR'
ONCE 一次,它将清除商店的所有属性。
如果让我感到困惑,请告诉我,我会尝试用代码解释。
【讨论】:
不是还保留了旧状态(允许状态时间旅行的能力)吗? “清除”的对象不会仍然保留在内存中吗?【参考方案2】:解决办法是写root reducer。
类似这样:
export function reducer(state: any, action: any): ActionReducer<any>
if (action.type === 'CLEAR STATE')
state = undefined;
return appReducer(state, action);
检查这个:How to reset the state of a Redux store?
【讨论】:
【参考方案3】:我对一种方法的猜测是拥有一个在其上注册了商店的组件。将它放在路由器出口或结构指令中,当值更改时,可能会在组件上强制销毁和初始化。
由于 store 被注册为组件的提供者(除非我弄错了)并且应该绑定到它,所以当组件被销毁并使用新组件创建新组件时,它应该被销毁。只是一个想法。我还没来得及测试。
但不要在父组件中注册提供程序。我相信注射剂是通过层次结构工作的。
【讨论】:
我不明白反对票。这是一个合理的潜在答案。如果它不起作用,则将其添加到 cmets 中。如果这不是您想要的答案类型,那么您需要更具体地提出问题。以上是关于如何清除#ngrx 中的状态?的主要内容,如果未能解决你的问题,请参考以下文章