Voici une traduction d'un article de Chidume Nnamdi publié sur blog.bitsrc.io. La traduction est publiée avec la permission de l'auteur.

L'avènement de la bibliothèque RxJS a ouvert une tonne de nouvelles possibilités dans le monde JS. Le but de RxJS est de réaliser beaucoup de choses avec une petite quantité de code. Après avoir lu cet article, vous apprendrez à échanger des données entre les composants d'application sur React en utilisant les capacités de RxJS.
Conseil : utilisez
Bit pour organiser et partager les composants React. Cela permettra à votre équipe de développer plus rapidement leurs applications. Essayez-le.

Collection React Components
Redux
L'échange de données entre les composants React non liés est la raison pour laquelle les bibliothèques d'état ont été créées. Il existe de nombreux modèles de gestion des états, mais deux sont plus connus: Flux et Redux.
Redux est populaire en raison de sa simplicité et de son utilisation de fonctionnalités pures. En effet, grâce à eux, il ne fait aucun doute que l'utilisation de réducteurs n'entraînera aucun effet secondaire.
Lorsque vous travaillez avec Redux, la première chose que nous faisons est de créer un entrepôt de données centralisé:

Ensuite, nous associons les composants à ce référentiel et, si vous le souhaitez, mettez à jour ou supprimez l'état. Toutes les modifications apportées au coffre-fort seront reflétées dans les composants qui lui sont associés. Ainsi, le flux de données s'étend à tous les composants, quel que soit leur degré d'imbrication. Un composant situé au nième niveau de la structure hiérarchique est capable de transmettre des données à un composant du plus haut niveau. Ce dernier, à son tour, peut transmettre des données au niveau du composant 21.
Rxjs
Avec l'avènement de RxJS, l'utilisation des bibliothèques de gestion d'état est devenue beaucoup plus facile. Beaucoup ont aimé le modèle Observer fourni par RxJS.
Nous créons simplement un flux
Observable
et permettons à tous les composants de l'écouter. Si un composant est ajouté au flux, les composants d'écoute (ou «signés») répondent à la mise à jour DOM.
L'installation
Nous créons l'application sur React, en utilisant
create-react-app
. Si vous ne disposez pas de
create-react-app
, installez-le d'abord globalement:
npm i create-react-app -g
Ensuite, nous générons le projet dans React:
create-react-app react-prj
Accédez au répertoire:
cd react-prj
Installez la bibliothèque rxjs:
npm i rxjs
Nous devrions avoir un fichier qui crée une nouvelle instance de
BehaviourSubject
.
Pourquoi utilisons-nous BehaviorSubject?
BehaviorSubject
est l'un des sujets de la bibliothèque RxJS. En tant que composant enfant de Subject,
BehaviorSubject
permet à de nombreux observateurs d'écouter le flux, ainsi que de diffuser des événements de masse à ces observateurs.
BehaviorSubject
enregistre la dernière valeur et la transmet à tous les nouveaux composants signés.
Donc
BehaviorSubject
:
- Permet un envoi groupé.
- Il stocke les dernières valeurs publiées par les abonnés et envoie en masse ces valeurs.

Le dossier src contient le fichier
messageService.js
, qui exporte l'instance
BehaviorSubject
et l'objet
messageService
vers l'
messageService
. L'objet abonné est créé au début du fichier - il est donc disponible pour tout composant importateur. L'objet
messageService
a une fonction d'envoi qui accepte le paramètre
msg
: il contient les données nécessaires à la transmission à tous les composants d'écoute. Dans le corps de la fonction, nous appelons la méthode
emit
. Il envoie des données en masse aux composants signés dans l'objet d'abonnement.
Supposons que nous ayons les composants suivants:
- ConsumerA;
- ConsumerB;
- ProducerA;
- ProducteurB.
Dans une structure hiérarchique, ils ressemblent à ceci:

Le composant d'application transmet le message ProducerA et ConsumerB. ProducerA envoie les données à ConsumerA et le message de ConsumerB parvient à ProducerB.

Les composants ConsumerA et ConsumerB ont un compteur d'état individuel. Dans leur méthode
componentDidMount
, ils sont abonnés au même flux d'
subscriber
. Dès qu'un événement est publié, le compteur est mis à jour pour les deux composants.
ProducerA et ProducerB ont des boutons
Increment Counter
et
Decrement Counter
qui, lorsqu'ils sont enfoncés, produisent
1
ou
-1
. Les composants signés ConsumerA et ConsumerB récupèrent l'événement et lancent leurs fonctions de rappel, mettant à jour la valeur du compteur d'état et du DOM.

Regardons à nouveau la structure hiérarchique:

ProducerB transmet les données ConsumerA, bien qu'elles soient totalement indépendantes. ProducerA transfère les données vers ConsumerB, ce n'est pas son composant parent. C'est tout l'intérêt de RxJS: nous venons de créer un nœud de flux d'événements central et de laisser les composants l'écouter. Lorsqu'un composant génère des événements, les composants d'écoute les détectent immédiatement.
Vous pouvez jouer avec l'application sur stackblitz:
https://react-lwzp6e.stackblitz.ioConclusion
Nous avons donc vu comment vous pouvez échanger des données entre les composants React à l'aide de RxJS. Nous avons utilisé
BehaviourSubject
pour créer un flux de données centralisé, puis laisser les autres composants s'abonner à ce flux. Désormais, lorsqu'un des composants génère des données, les autres composants les reçoivent également. Le niveau de composants dans la structure hiérarchique est sans importance.
Si vous avez des questions concernant ce sujet ou si vous souhaitez que j'ajoute, corrige ou supprime quelque chose,
écrivez- le dans les commentaires, dans l'e-mail ou dans un message personnel.
Merci de votre attention!