我应该将ngrx状态重置为ngOnInit上的初始状态

时间:2018-03-17 06:00:17

标签: angular ngrx ngrx-store

我正在创建一个角度应用程序,并创建了3个简单的crud操作。我使用ngrx进行状态管理,效果很好。我已经订阅了每个crud状态的一些片段,如

createUserLoaded$.subscribe(loaded => this.showSuccessNotification());

一切都很好。我在相应组件的 ngOnInit 上订阅这些可观察对象,并在 ngOnDestroy 上再次取消订阅所有这些可观察对象。

但问题是,当我创建用户时,转到另一条路线并返回创建用户路径,它会显示成功通知。原因是createUserLoaded$的最后状态为真,并且相应的组件再次订阅它。

所以我想得到社区的意见,我应该再次将减速器重置为初始状态吗?这是一个好习惯吗?或者我还应该做些什么?

1 个答案:

答案 0 :(得分:1)

没有代码无法帮助您正确。但你可以在你的组件的ngOnDestroy()上调度和事件来重置状态,如果你愿意,也养成在你的Observable模板中使用async的习惯,他们会为你取消订阅。 Ngrx与Smart/Dumb Component

交手
 ngOnDestroy(): void {
    this.store.dispatch(new classAction.resetSuccessNotification());
 } 

如果您只是使用祝酒词来显示通知并且不关心他们的状态,那么您可以只使用效果.loggerService只是一个显示吐司的服务

@Effect({dispatch: false})
  createUserLoadede$ = this.actions$.pipe(
    ofType(Vendor.ActionType.CREATE_USER_LOADED),
    map((action: Vendor.createUserLoadedel) => action.payload),
    tap((payload) => this.loggerService.SuccessToast(payload.message, 6000))
  );