IT Biblioteka frontendowa

RxJS

Definicja #

RxJS (Reactive Extensions for JavaScript) to biblioteka programowania reaktywnego dla JavaScript i TypeScript, będąca portem ReactiveX dla JS. Implementuje wzorzec Observer i Iterator przez centralny typ Observable — strumień zdarzeń, danych lub wartości w czasie.

Kluczowe koncepcje RxJS:

  • Observable — lazy producer wartości; emituje wartości, błędy lub sygnał zakończenia; nie robi nic dopóki ktoś się nie subskrybuje
  • Observer — konsument Observable; implementuje next(), error(), complete()
  • Subscription — wynik subscribe(); zarządza zasobami; unsubscribe() zatrzymuje strumień
  • Operatory — czyste funkcje transformujące strumienie; komponowane przez pipe():
    • Transformujące: map(), pluck(), scan()
    • Filtrujące: filter(), take(), debounceTime(), distinctUntilChanged()
    • Łączące strumienie: switchMap(), mergeMap(), concatMap(), exhaustMap() — flattening operators
    • Kombinujące: combineLatest(), forkJoin(), withLatestFrom()
    • Obsługa błędów: catchError(), retry(), retryWhen()
  • Subject — Observable i Observer jednocześnie; służy do multicastingu (BehaviorSubject, ReplaySubject, AsyncSubject)
  • Schedulers — kontrola wykonania (synchroniczne, asynchroniczne, animationFrame)

RxJS jest rdzeniem Angulara — HttpClient, Router, ReactiveFormsModule i ActivatedRoute zwracają Observable. W nowoczesnym Angular używany coraz rzadziej bezpośrednio dzięki Signals API, ale wciąż niezbędny dla zaawansowanych scenariuszy.

Zastosowania #

  • HTTP requests w Angular — HttpClient zwraca Observable; operatory switchMap, catchError do obsługi żądań, anulowania i błędów
  • Reaktywne formularze Angular — FormControl.valueChanges jako Observable; debounceTime + distinctUntilChanged dla live search
  • State management — NgRx (Redux dla Angular) opiera się na RxJS; Actions, Reducers, Selectors jako strumienie
  • WebSocket i real-time data — RxJS do obsługi strumieni WebSocket; automatyczne reconnection przez retryWhen
  • Koordynacja wielu asynchronicznych operacji — forkJoin do równoległych requestów, combineLatest do reaktywnego UI

Ścieżka nauki #

RxJS jest obowiązkowy dla Angular Developerów — warto zrozumieć go głęboko, nie tylko używać powierzchownie.

Zacznij od:

  • Podstawy Observable: tworzenie (of(), from(), interval()), subscribe, unsubscribe
  • Podstawowe operatory: map(), filter(), tap(), take()
  • pipe() — kompozycja operatorów; każdy operator to czysta funkcja
  • AsyncPipe w Angular — observable$ | async automatycznie subskrybuje i odsubskrybowuje

Następnie pogłębiaj:

  • Flattening operators — kluczowe: switchMap (anuluje poprzednie), mergeMap (równoległe), concatMap (kolejkuje), exhaustMap (ignoruje nowe podczas trwania)
  • Subject i BehaviorSubject — kiedy i jak używać do state sharing
  • Sygnały Angular (Signals) — nowoczesna alternatywa dla RxJS w Angular 16+; toSignal() jako most między RxJS a Signals
  • RxJS Marbles — wizualna technika testowania strumieni RxJS

FAQ #

Czym jest Observable w RxJS?
Observable to lazy strumień wartości — producent danych, który nie robi nic dopóki ktoś się nie subskrybuje. Może emitować: jedną lub wiele wartości, błąd lub sygnał zakończenia. Observable jest zimny (cold) domyślnie — każdy subscriber dostaje osobne wykonanie. Contrakt: zero lub więcej next(), opcjonalnie error() lub complete().
Czym różni się switchMap od mergeMap?
switchMap anuluje poprzednie wewnętrzne Observable gdy nowa wartość pojawi się na wejściu — idealny dla HTTP requestów (live search: nowy keystroke anuluje poprzedni request). mergeMap uruchamia wszystkie wewnętrzne Observable równolegle bez anulowania. concatMap kolejkuje — czeka na zakończenie poprzedniego. exhaustMap ignoruje nowe wartości podczas trwania bieżącego Observable.
Dlaczego warto używać AsyncPipe zamiast ręcznego subscribe?
AsyncPipe (| async w szablonie Angular) automatycznie subskrybuje Observable i odsubskrybowuje przy zniszczeniu komponentu — eliminując jeden z najczęstszych wycieków pamięci w Angular. Upraszcza kod: zamiast subscribe/unsubscribe w ngOnInit/ngOnDestroy, Observable jest konsumowany bezpośrednio w template. Trigguje też ChangeDetection przy nowej wartości.
Czy RxJS jest wciąż potrzebny w Angular z Signals?
Signals (Angular 16+) upraszczają zarządzanie stanem synchronicznym i reaktywność komponentów — zastępują wiele przypadków użycia Subject/BehaviorSubject. Jednak RxJS wciąż jest potrzebny dla: HttpClient (zwraca Observable), złożonych asynchronicznych przepływów, NGRx i WebSocketów. toSignal() i toObservable() łączą oba światy. Angular nie deprecjonuje RxJS.
Ile zarabia Angular Developer znający RxJS?
RxJS jest wymagany w większości ofert Angular Developer. Mid Angular Developer z biegłą znajomością RxJS zarabia od 12 000 do 22 000 zł brutto. Senior ze znajomością NgRx, Signals i zaawansowanych operatorów RxJS: 20 000 do 35 000 zł. Biegłość w RxJS to jeden z kluczowych wyróżników na rozmowach o pracę Angular.
Ostatnia aktualizacja:

Powiązane hasła

Technologie i biblioteki, które najczęściej pojawiają się razem z RxJS w ogłoszeniach.

Cały słownik IT

Najnowsze oferty z RxJS

Wybrane ogłoszenia wymagające RxJS — wszystkie z widełkami.

Wszystkie 1

Przeglądaj słownik IT alfabetycznie

Wybierz literę, aby zobaczyć wszystkie hasła zaczynające się od niej.