如何在#ngrx中清除状态?

Tuo*_* Le 4 ngrx

我正在使用Ngrx和Angular2构建移动应用程序.当用户从我的应用程序注销时,我想清除存储吗?任何人都可以知道如何做到这一点?

Sav*_*kar 7

您应该在每个减速器中都有一个明确的动作,它将清理商店中的各个属性.在您拨打电话时,手动调度每个减速器中的清除操作logout.我现在不确定它是否可以一次性清理整个商店.

替代方案:采用更清洁,更快捷的方法.无论何时通过store.dispatch它调用一个动作,都可以调用所有减速器action.type.假设您的操作类型名称是CLEAR,将此操作放在每个reducer中以清除商店的相应属性.并store.dispatch使用action.type = 'CLEAR'ONCE 调用,它将清除商店的所有属性.

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


Tuo*_* Le 5

解决方法是编写根减速器。

与此类似:

export function reducer(state: any, action: any): ActionReducer<any> {
    if (action.type === 'CLEAR STATE') {
        state = undefined;
    }

    return appReducer(state, action);
}
Run Code Online (Sandbox Code Playgroud)

请检查以下内容:如何重置Redux存储的状态?


wir*_*mer 0

我猜测执行此操作的方法是使用一个在其上注册了商店的组件。将其放入路由器出口或结构指令中,当值发生变化时,可以强制对组件进行销毁和初始化。

由于商店已注册为组件的提供者(除非我弄错了)并且应该与其绑定,因此当组件被销毁并使用新组件创建新组件时,它应该被销毁。只是一个想法。我还没有时间测试它。

但不要在父组件中注册提供程序。我相信注射剂是通过层次结构发挥作用的。

  • 我不明白投反对票。这是一个合理的潜在答案。如果它不起作用,请在评论中添加它。如果这不是您想要的答案类型,那么您需要更具体地提出您的问题。 (2认同)