Pull to refresh

Comments 8

Почему используется takeUntil, а не unsubscribe?
В исходниках ангуляра используют unsubscribe.

В том аде из вручную написанных реактивных цепочек, которые порождаются активным использованием RxJS — любая экономия на смыслах оказывается выгодной. takeUntil(this.destroy$) — это способ отписать любое количество подписок с помощью одного Subject.

Subscription композитная, можно сразу все отписать в OnDestroy()

// constructor()
const subscription = new Subscription();

// Lifetime
const subscription.add(
	stream1$.subscribe(...);
);
const subscription.add(
	stream2$.subscribe(...);
);

// OnDestroy()
subscription.unsubscribe(); // release all subscription

UPD: внизу @sashaqred скинул статью где все эти варианты уже описаны

Можно, но получилось не короче и с таким же количеством бойлерплейтовых смысловых единиц.

Записывать подписку в переменную, что бы потом вручную вызвать .unsubscribe руками — один из вариантов. Он норм, когда подписка всего одна.

Если подписок больше, то это уже не так удобно. Для этого это можно использовать takeUntil, как были примеры выше в статье.

Тут больше написано про различные варианты автоматических отписок https://medium.com/ngx/why-do-you-need-unsubscribe-ee0c62b5d21f

С takeUntil еще можно провернуть вообще без хука OnDestroy в компоненте. Есть решение от Тинькофф с DestroyService, который провайдится в компоненте, инжектится как Observable и делается на этот Observable уже takeUntil. А хук OnDestroy срабатывает не в компоненте, а в сервисе. Получается меньше кода в компонентах.

увеличивает магию в компонентах...

но если очень хочется, то не так сложно написать свой декоратор, чтобы не подключать лишний пакет

Sign up to leave a comment.

Articles