所以我通常有一个方法可以在点击时调度一个动作:
create() {
this.store.dispatch(new Create(this.form.value));
}
此代码触发以下场景并根据请求是否失败分派 CreateSuccess 或 CreateFailed
@Action(Create)
create({ dispatch }: StateContext<StateInterface>, { entity}: Create) {
return this.http.post('mybackend', entity).pipe(
tap<EntityType>(resp => dispatch(new CreateSuccess(resp))),
catchError(error => dispatch(new CreateFailed(error)))
);
}
现在在我调用的组件内部,create()
我正在监听这两个动作。
this.actions$.pipe(
ofActionSuccessful(CreateSuccess, UpdateSuccess),
takeUntil(componentDestroyed(this)) // <--
).subscribe(action => doStuff());
这一切都完美无缺,唯一困扰我的是每次我使用它时,我都必须添加 takeUntil() 部分,以便在组件被销毁时取消订阅。
我知道这对每个人来说可能都不是一个真正的问题,但我想知道是否有更清洁的方法来做到这一点。
我已经考虑过可以处理此问题的自定义 RxJS 运算符,但也许还有其他选项,或者(我还没有找到任何东西),NGXS 是否有办法自行取消订阅?