Datenaustausch zwischen React-Komponenten mithilfe der RxJS-Bibliothek

Hier ist eine Übersetzung eines Artikels von Chidume Nnamdi, der auf blog.bitsrc.io veröffentlicht wurde. Die Übersetzung wird mit Genehmigung des Autors veröffentlicht.



Das Aufkommen der RxJS-Bibliothek hat eine Menge neuer Möglichkeiten in der JS-Welt eröffnet. Das Ziel von RxJS ist es, mit einer kleinen Menge Code viel zu erreichen. Nachdem Sie diesen Artikel gelesen haben, erfahren Sie, wie Sie mithilfe der Funktionen von RxJS Daten zwischen Anwendungskomponenten in React austauschen.

Tipp : Verwenden Sie Bit , um React-Komponenten zu organisieren und freizugeben. Auf diese Weise kann Ihr Team seine Anwendungen schneller entwickeln. Probieren Sie es einfach aus.


Komponentensammlung reagieren

Redux


Für den Datenaustausch zwischen nicht verwandten React-Komponenten wurden die Statusbibliotheken erstellt. Es gibt viele Vorlagen für die Statusverwaltung, aber zwei sind am bekanntesten: Flux und Redux.

Redux ist beliebt wegen seiner Einfachheit und der Verwendung von reinen Funktionen. Dank ihnen besteht kein Zweifel daran, dass die Verwendung von Reduktionsmitteln keine Nebenwirkungen hervorruft.

Wenn wir mit Redux arbeiten, erstellen wir zunächst ein zentrales Data Warehouse:



Als Nächstes ordnen wir die Komponenten diesem Repository zu und aktualisieren oder löschen den Status, falls gewünscht. Alle am Tresor vorgenommenen Änderungen werden in den zugehörigen Komponenten berücksichtigt. Somit erstreckt sich der Datenfluss auf alle Komponenten, unabhängig von ihrem Verschachtelungsgrad. Eine Komponente auf der n-ten Ebene der hierarchischen Struktur kann Daten an eine Komponente der höchsten Ebene übertragen. Letzterer kann wiederum Daten an die Ebene der Komponente 21 übertragen.

Rxjs


Mit dem Aufkommen von RxJS ist die Verwendung von Statusverwaltungsbibliotheken viel einfacher geworden. Vielen gefiel das von RxJS bereitgestellte Observer-Muster.

Wir erstellen einfach einen Observable Stream und ermöglichen allen Komponenten, ihn anzuhören. Wenn dem Stream eine Komponente hinzugefügt wird, reagieren Listener-Komponenten (oder „signierte“ Komponenten) auf das DOM-Update.

Installation


Wir erstellen die Anwendung auf React mit der create-react-app React create-react-app . Wenn Sie keine create-react-app haben create-react-app installieren Sie sie zuerst global:

 npm i create-react-app -g 

Als nächstes generieren wir das Projekt in React:

 create-react-app react-prj 

Gehen Sie in das Verzeichnis:

 cd react-prj 

Installieren Sie die rxjs-Bibliothek:

 npm i rxjs 

Wir sollten eine Datei haben, die eine neue Instanz von BehaviourSubject .

Warum verwenden wir BehaviorSubject?


BehaviorSubject ist einer der Betreff in der RxJS-Bibliothek. BehaviorSubject eine untergeordnete Komponente von Subject und ermöglicht es vielen Beobachtern, den Stream sowie Massenübertragungsereignisse an diese Beobachter zu hören. BehaviorSubject speichert den letzten Wert und übergibt ihn an alle neu signierten Komponenten.

Also BehaviorSubject :

  • Ermöglicht Massenversand.
  • Es speichert die neuesten von Abonnenten veröffentlichten Werte und sendet diese Werte per Massenmail.



Der Ordner src enthält die Datei messageService.js , die die BehaviorSubject Instanz und das messageService Objekt an den messageService exportiert. Das Abonnentenobjekt wird am Anfang der Datei erstellt, sodass es für jede importierende Komponente verfügbar ist. Das messageService Objekt verfügt über eine messageService , die den Parameter msg akzeptiert: Es enthält die Daten, die für die Übertragung an alle empfangenden Komponenten erforderlich sind. Im Hauptteil der Funktion rufen wir die emit Methode auf. Es sendet Daten per Bulk-Mail an die signierten Komponenten im abonnierenden Objekt.

Angenommen, wir haben die folgenden Komponenten:

  • ConsumerA;
  • ConsumerB;
  • ProduzentA;
  • ProduzentB.

In einer hierarchischen Struktur sehen sie folgendermaßen aus:



Die Anwendungskomponente überträgt die Nachricht ProducerA und ConsumerB. ProducerA sendet die Daten an ConsumerA und die Nachricht von ConsumerB geht an ProducerB.



Die Komponenten ConsumerA und ConsumerB haben einen individuellen Statuszähler. In ihrer componentDidMount Methode haben sie denselben subscriber . Sobald ein Ereignis veröffentlicht wird, wird der Zähler für beide Komponenten aktualisiert.

ProducerA und ProducerB haben Increment Counter und Decrement Counter Tasten, die beim Drücken 1 oder -1 erzeugen. Die signierten Komponenten ConsumerA und ConsumerB nehmen das Ereignis auf und starten ihre Rückruffunktionen, wobei der Wert des Statuszählers und des DOM aktualisiert wird.



Schauen wir uns noch einmal die hierarchische Struktur an:



ProducerB überträgt ConsumerA-Daten, obwohl sie völlig unabhängig sind. ProducerA überträgt Daten an ConsumerB und ist nicht dessen übergeordnete Komponente. Das ist der springende Punkt bei RxJS: Wir haben gerade einen zentralen Ereignisflussknoten erstellt und die Komponenten darauf warten lassen. Wenn eine Komponente Ereignisse generiert, werden sie von abhörenden Komponenten sofort erfasst.

Sie können mit der Anwendung auf stackblitz spielen: https://react-lwzp6e.stackblitz.io

Fazit


Wir haben also gesehen, wie Sie mit RxJS Daten zwischen React-Komponenten austauschen können. Wir haben BehaviourSubject , um einen zentralisierten Datenstrom zu erstellen, und dann den Rest der Komponenten diesen Strom abonnieren lassen. Wenn eine der Komponenten Daten generiert, empfangen diese auch die anderen Komponenten. Die Ebene der Komponenten in der hierarchischen Struktur ist unwichtig.

Wenn Sie Fragen zu diesem Thema haben oder möchten, dass ich etwas hinzufüge, korrigiere oder lösche, schreiben Sie darüber in den Kommentaren, in der E-Mail oder in einer persönlichen Nachricht.

Vielen Dank für Ihre Aufmerksamkeit!

Source: https://habr.com/ru/post/de453310/


All Articles