如何在#ngrx中清除状态?

时间:2016-08-05 16:26:49

标签: ngrx

我正在使用Ngrx和Angular2构建移动应用程序。当用户从我的应用程序注销时,我想清除存储吗?有谁知道怎么做?

3 个答案:

答案 0 :(得分:7)

您应该在每个减速器中都有一个明确的动作,这将清除商店中的各个属性。当您致电<div class="wrapper"> <div class="articlePreview"> <div class="imgPreview"> <img class="img" src="http://lorempixel.com/500/200"/> </div> <a href="#">I'm a link</a> </div> <div class="articlePreview"> <div class="imgPreview"> <img class="img" src="http://lorempixel.com/200/500"/> </div> <a href="#">I'm a link</a> </div> <div class="articlePreview"> <div class="imgPreview"> <img class="img" src="http://lorempixel.com/100/100"/> </div> <a href="#">I'm a link</a> </div> </div>时,手动调度每个减速器中的清除操作。我现在不确定它是否可以一次性清理整个商店。

<强>替代: 一种更清洁,更快捷的方法。每当您通过logout致电某个操作时,它会使用store.dispatch调用所有缩减器。假设您的操作类型名称为action.type,请将此操作放在每个reducer中以清除商店的相应属性。并使用CLEAR ONCE调用store.dispatch,它将清除商店的所有属性。

如果它让我感到困惑,我会尝试用代码解释。

答案 1 :(得分:3)

解决方案是编写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?

答案 2 :(得分:-1)

我猜这样做的方法是让一个组件在其上注册商店。将它放在路由器插座或结构指令中,当值发生变化时,它可能会强制销毁组件并初始化。

由于商店被注册为组件的提供者(除非我误认为)并且应该绑定到它,因此应该在销毁组件时销毁它,并使用新组件创建新组件。只是一个想法。我没有时间去测试它。

但是,不要在父组件中注册提供程序。我相信注射剂可以通过层次结构进行工作。