ΠžΠ±Π·ΠΎΡ€

Π—Π° всС врСмя, Ρ‡Ρ‚ΠΎ Π²Ρ‹ использовали Angular, Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° RxJ, это ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ простыС Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ прогрСссивныС Ρ‚Π΅ΠΌΡ‹, Π½ΠΎ Ρƒ нас всСгда Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти. Π˜Ρ‚Π°ΠΊ, Ρƒ мСня Π΅ΡΡ‚ΡŒ сдСлка для вас, ΠΌΠΎΠ³Ρƒ Π»ΠΈ я Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ? 😏

πŸ˜’ Π˜Ρ‚Π°ΠΊ, Π² Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°?

Π”Π°Π²Π°ΠΉΡ‚Π΅ прСдставим простой случай: Ρƒ вас Π΅ΡΡ‚ΡŒ Π’Π΅ΠΌΠ° ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ просто ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ подписку.

private readonly data$ = interval(1000);
public ngOnInit(): void {
    this.data$.subscribe(console.log);
}

Как ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, каТдая подписка, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ сдСлали Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½Π° вмСстС с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ. Π—Π½Π°Ρ‡ΠΈΡ‚, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ самых популярных способах Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь. И я ΠΏΠΎΠΊΠ°ΠΆΡƒ ΠΈΡ… выпуски.

Π’ ΠΎΠ±ΠΎΠΈΡ… случаях Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈ Ссли Π²Ρ‹ Π΅Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΎΠ΄Π½Ρƒ подписку, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ большС ΠΊΠΎΠ΄Π° ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ подписку Π² своСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

РСшСниС здСсь

@AutoUnsubscribe()
public someObservable = interval(1000);

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ AutoUnsubscribe ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ добавляСт всС подписки Π² массив, Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° β€” Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ .unsubscribe() для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² массивС.

npm i ngx-auto-unsubscribe-decorator

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ этот Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€?

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

Он ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ²: Observable ΠΈ Subscription

@AutoUnsubscribe()
public someSubscription = interval(1000).subscription();
@AutoUnsubscribe()
public someObservable = interval(1000);

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, это Π½Π΅ повлияСт Π½Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ подписок.

public ngOnInit(): void {
    this.someObservable.subscribe();
    this.someObservable = interval(150);
    this.someObservable.subscribe();
}

ВсС подписки Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Observable ΠΈΠ»ΠΈ Subscription.

@AutoUnsubscribe()
public getObservable(): Observable<number> {
    return interval(1000);
}
@AutoUnsubscribe()
public getSubscription(): Subscription {
    return interval(1000).subscribe();
}

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, конструктором ΠΈΠ»ΠΈ ngOnInit, это Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ большС Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ трСбуСтся.

public ngOnInit(): void {
    this.getObservable().subscribe();
    this.getSubscription();
}

ΠŸΡ€Π΅Π»Π΅ΡΡ‚ΡŒ этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ просто ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ ΠΎΠ΄Π½Ρƒ Π²Π΅Ρ‰ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π΅ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π½Π΅ бСспокоясь ΠΎ Π½Π°ΡˆΠΈΡ… подписках.

Бпасибо Π·Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅. ВсС ссылки Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π½ΠΈΠΆΠ΅ πŸ”½

Π’Π΅Π»Π΅Π³Ρ€Π°ΠΌΠΌΠ°: https://t.me/Nillcon

Π‘Ρ‚Π΅ΠΊΠ‘Π»ΠΈΡ† | НПМ | Π“ΠΈΡ‚Ρ…Π°Π±