У меня есть простой компонент, который выбирает что-то из состояния и прислушивается к изменению:
private items$: Observable<Item[]>;
private alive: boolean = true;
contructor(private store: Store<state>) {
this.items$ = this.store.select(selectItems);
}
ngOnInit() {
this.items$
.pipe(
takeWhile(() => this.alive)
)
.subscribe((items: Item[]) => {
console.log('items changed!', items);
// dispatch some actions
});
}
ngOnDestroy() {
this.alive = false;
}
Он работает отлично - каждый раз, когда элементы меняются, я вижу «элементы изменены!»строка записана.Когда я перенаправляю куда-то еще и компонент уничтожается, подписка не запускается.
Но когда я перенаправляю обратно на компонент, и подписка снова активна, она сразу же выполняет то же количество изменений, что и в начале., даже если ничего не изменилось.
Например, когда я вхожу на страницу:
items changed! null
items changed! ['a', 'b', 'c']
items changed! ['a', 'b', 'c', 'd']
Когда я перенаправляю и возвращаюсь к компоненту:
items changed! ['a', 'b', 'c', 'd']
items changed! ['a', 'b', 'c', 'd']
items changed! ['a', 'b', 'c', 'd']
Чтоздесь не так?Я пробовал takeUntil
и тему, я пытался отписаться вручную - ничто не решает проблему.