Das ReactiveX (häufig kurz Rx) ist ein Programmiermodell und eine Familie von Bibliotheken für reaktive, ereignisbasierte Programmierung. Sein zentrales Konzept ist das Observable: ein Strom von Werten, der über die Zeit Werte ausgeben kann — null, einen, viele — und an dessen Verlauf sich Konsumenten anhängen.
ReactiveX existiert in Implementierungen für viele Sprachen: RxJS (JavaScript/TypeScript), RxJava (JVM), RxSwift, Rx.NET, RxKotlin und weitere. Die Konzepte und Operator-Namen sind weitgehend identisch — wer Rx in einer Sprache beherrscht, findet sich in den anderen schnell zurecht.
Kernkonzepte
ReactiveX baut auf wenigen Bausteinen auf:
- Observable — die Quelle eines Wertestroms. Kann synchron oder asynchron sein, einzelne Werte oder einen unendlichen Strom liefern.
- Observer — wer auf den Strom hört. Reagiert auf
next(neuer Wert),error(Abbruch) undcomplete(Ende). - Subscription — die Verbindung zwischen Observable und Observer. Lässt sich beenden, um Lecks zu vermeiden.
- Operators — Funktionen, die einen Strom in einen anderen umformen.
map,filter,merge,switchMap,debounceTimeund Dutzende mehr. - Subject — eine Mischform: gleichzeitig Observable und Observer, oft als Bus für Ereignisse.
Wo es glänzt
ReactiveX ist besonders stark, wenn ereignis- oder zeitorientierte Daten zusammenfließen müssen:
- Benutzeroberflächen — Tippeingaben, Klicks, Hover-Verhalten als Ströme behandeln.
- API-Aufrufe — Cancelation, Retry, Backoff, Kombination paralleler Anfragen.
- WebSockets und Server-Sent Events — eingehende Nachrichten als unendliche Ströme verarbeiten.
- State-Management — abgeleitete Werte aus mehreren Quellen mit klaren Regeln berechnen.
In Angular ist RxJS Teil des Frameworks; HTTP-Aufrufe, Routing-Ereignisse und Form-Eingaben sind Observables. Wer Angular ernsthaft nutzt, kommt an Rx nicht vorbei.
Lernkurve und Trade-offs
ReactiveX hat eine steile Lernkurve. Die Operator-Vielfalt ist groß, manche unterscheiden sich nur subtil (switchMap vs. mergeMap vs. concatMap). Schlecht dosiert wirken Rx-Codebasen schnell unleserlich; sauber eingesetzt sind sie elegant und robust. Für viele Standardfälle reichen heute auch Promises mit async/await oder einfachere Reactive-Ansätze (Signals, Stores) — Rx zahlt sich vor allem dort aus, wo wirklich Ströme von Ereignissen fließen.