Поэтому у меня обычно есть метод, который отправляет действие по клику:
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 сам отменяет подписку?