Wróć do strony głównej
RxJS

RxJS7 – co nowego?

Nieodzownym elementem Angulara jest reaktwyność, a wraz z nią RxJS, który niedawno miał debiut swojej siódmej już wersji. Angular w wersji 12.2 rozpoczął wsparcie tej wersji RxJS, przyjrzyjmy się zatem czego możemy się spodziewać.

1. Mniejszy bundle size

Pierwszym usprawnieniem jest mniejszy bundle size. RxJS 7 jest mniejszy o 47% od swojego poprzednika. Jeżeli twoja aplikacja używała wszystkich operatorów z wersji 6, co wymagałoby 52 KB, w wersji 7 będzie to tylko 19 KB. Mogłoby się wydawać, że nie jest to dużo, ale dla użytkownika mobilnego z wolnym połączeniem internetowym każdy KB ma znaczenie.

2. Lepsze typowanie – najnowszy Typescript

RxJS 7 wymaga Typescript co najmniej w wersji 4.2, który dostarcza znaczne usprawnienia w kontekście typowania. Spójrzmy tylko na poniższe przykłady:

3. Deprecate toPromise()

Operator toPromise został oznaczony jako deprecated i zostanie usunięty w V8. W zamian otrzymujemy dwa nowe operatory lastValueFrom() i firstValueFrom(). Jak wskazuje nazwa, firstValueFrom zwraca  pierwszą wartością strumienia, a lastValueFrom zwraca ostatnią wartość z obserwowanego strumienia. Jeśli nie zostaną wyemitowane żadne wartości, zostanie zgłoszony błąd, w przeciwieństwie do toPromise, który rozwiązuje się z wartością undefined. Jeżeli chcemy uniknąć błędu w przypadku braku emisji, możemy zdefiniować wartość domyślną.

4. Zmiana nazwy operatorów

  • combineLatest zmieniony na combineLatestWith
  • merge zmieniony na mergeWith
  • zip zmieniony na zipWith
  • race zmieniony na raceWith
  • concat zmieniony na concatWith

Stare operatory zostaną całkowicie usunięte, z następnym major releasem.

5. Uniemożliwienie łączenia subskrybcji przy wykorzystaniu subscrption.add()

subscritption.add() było używane do łączenia ze sobą wielu subskrybcji, tak żebyśmy mogli odsubkrybować się od wszystkich za jednym razem. Niestety jak sam twórca potwierdza, takie podejście jest błędne i może prowadzić do wielu nieoczekiwanych zachowań w kontekście odsubkrybowywania się (źródło). Od teraz subscription.add() zwraca void, a sam twórca RxJS zaleca  m.in. używanie operatora takeUntil.

ŹLE
DOBRZE

 

6. Operator retry z parametrem retryOnSuccess

Uprzednio parametr operatora retry nie był resetowany ‘onSuccess’.  Obecnie uzyskujemy opcję, która pozwoli skonfigurować takie zachowanie.

7. Duże zmiany w obrębie “Sharing operators”

Nastepujące operatory zostały oznaczone jako deprecated – multicast, publish, publishReplay, publishLast, and refCount. W planach było również pozbycie się operatora shareReplay, aczkolwiek na ten moment ten cieszy się bardzo dużą popularnością wśród programistów i pozostał w kolejnej wersji RxJS. Natomiast trzeba spodziewać się, że w przyszłości on również dołączy do wyżej wymienionych operatorów. W dłużej perspektywie pozostaną operatory share, connect oraz connectable. Na dzień dzisiejszy rekomendowane jest przenoszenie się na operator share. W wersji 7 zyskuje on kilka dodatkowych parametrów konfiguracyjnych, gdzie możemy zdefiniować niestandardowe zachowanie dla naszego strumienia.

Podsumowanie

To tylko wybrane nowości wchodzące w życie wraz z RxJS 7. Możesz przeczytać więcej o aktualizacji pod następującymi linkami:

Daj znać w komentarzu, która zmiana jest dla Ciebie najistotniejsza i dlaczego 😉 

O autorze

Mateusz Stefańczyk

Zapalony redaktor angular.love. W portalu od wielu lat. Miłośnik konsol maści wszelakiej i najróżniejszych indyczków:) Fan piłki nożnej zarówno tej prawdziwej, jak i wirtualnej. Każdego weekendu siada głęboko w fotelu, zapina pasy i rozkoszuję się europejskimi rozgrywkami.

Chcesz razem z nami tworzyć treści na bloga? Dołącz do nas i twórz wartościowe treści dla sympatyków Angulara z Angular.love!

0 komentarzy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *