Intercambie datos entre componentes React utilizando la biblioteca RxJS

Aquí hay una traducción de un artículo de Chidume Nnamdi publicado en blog.bitsrc.io. La traducción se publica con permiso del autor.



El advenimiento de la biblioteca RxJS ha abierto un montón de nuevas posibilidades en el mundo JS. El objetivo de RxJS es lograr mucho con una pequeña cantidad de código. Después de leer este artículo, aprenderá a intercambiar datos entre los componentes de la aplicación en React, utilizando las capacidades de RxJS.

Consejo : use Bit para organizar y compartir componentes React. Esto permitirá a su equipo desarrollar sus aplicaciones más rápido. Solo inténtalo.


Colección React Components

Redux


El intercambio de datos entre componentes React no relacionados es para lo que se crearon las bibliotecas estatales. Hay muchas plantillas de administración de estado, pero dos son más conocidas: Flux y Redux.

Redux es popular debido a su simplicidad y al uso de características puras. De hecho, gracias a ellos, no hay duda de que el uso de reductores no provocará ningún efecto secundario.

Cuando trabajamos con Redux, lo primero que hacemos es crear un almacén de datos centralizado:



A continuación, asociamos los componentes con este repositorio y, si lo desea, actualizamos o eliminamos el estado. Cualquier cambio realizado en el almacén se reflejará en los componentes asociados con él. Por lo tanto, el flujo de datos se extiende a todos los componentes, independientemente de su grado de anidamiento. Un componente ubicado en el enésimo nivel de la estructura jerárquica es capaz de transmitir datos a un componente del nivel más alto. Este último, a su vez, puede transmitir datos al nivel del componente 21.

Rxjs


Con la llegada de RxJS, el uso de bibliotecas de administración de estado se ha vuelto mucho más fácil. A muchos les gustó el patrón Observador proporcionado por RxJS.

Simplemente creamos una secuencia Observable y Observable que todos los componentes la escuchen. Si se agrega algún componente a la secuencia, los componentes de escucha (o "firmados") responden a la actualización DOM.

Instalación


Creamos la aplicación en React, usando create-react-app . Si no tiene create-react-app , primero instálela globalmente:

 npm i create-react-app -g 

A continuación, generamos el proyecto en React:

 create-react-app react-prj 

Ve al directorio:

 cd react-prj 

Instale la biblioteca rxjs:

 npm i rxjs 

Deberíamos tener un archivo que cree una nueva instancia de BehaviourSubject .

¿Por qué usamos BehaviorSubject?


BehaviorSubject es uno de los Sujetos en la biblioteca RxJS. Al ser un componente secundario del Sujeto, BehaviorSubject permite que muchos observadores escuchen la transmisión, así como eventos de transmisión masiva a estos observadores. BehaviorSubject guarda el último valor y lo pasa a todos los nuevos componentes firmados.

Entonces BehaviorSubject :

  • Permite el envío a granel.
  • Almacena los últimos valores publicados por los suscriptores y envía estos valores por correo masivo.



La carpeta src contiene el archivo messageService.js , que exporta la instancia BehaviorSubject y el objeto messageService al messageService . El objeto de suscriptor se crea al principio del archivo, por lo que está disponible para cualquier componente de importación. El objeto messageService tiene una función de envío que acepta el parámetro msg : contiene los datos necesarios para la transmisión a todos los componentes de escucha. En el cuerpo de la función, llamamos al método emit . Envía datos de forma masiva a los componentes firmados en el objeto suscrito.

Supongamos que tenemos los siguientes componentes:

  • ConsumidorA;
  • ConsumidorB;
  • ProductorA;
  • Productor B.

En una estructura jerárquica, se ven así:



El componente de aplicación transmite el mensaje ProducerA y ConsumerB. ProducerA envía los datos a ConsumerA, y el mensaje de ConsumerB llega a ProducerB.



Los componentes ConsumerA y ConsumerB tienen un contador de estado individual. En su método componentDidMount , están suscritos a la misma secuencia de subscriber . Tan pronto como se publica un evento, el contador se actualiza para ambos componentes.

ProducerA y ProducerB tienen botones de Increment Counter y Increment Counter Decrement Counter que, cuando se presionan, producen 1 o -1 . Los componentes firmados ConsumerA y ConsumerB recogen el evento y lanzan sus funciones de devolución de llamada, actualizando el valor del contador de estado y DOM.



Veamos nuevamente la estructura jerárquica:



ProducerB transmite datos de ConsumerA, aunque no tiene ninguna relación. El productor A transfiere datos al consumidor B, no siendo su componente principal. Ese es el objetivo de RxJS: acabamos de crear un nodo central de flujo de eventos y dejamos que los componentes lo escuchen. Cuando cualquier componente genera eventos, los componentes de escucha los recogen inmediatamente.

Puedes jugar con la aplicación en stackblitz: https://react-lwzp6e.stackblitz.io

Conclusión


Entonces, vimos cómo puede intercambiar datos entre los componentes React usando RxJS. Utilizamos BehaviourSubject para crear un flujo de datos centralizado y luego dejamos que el resto de los componentes se suscriban a este flujo. Ahora, cuando uno de los componentes genera datos, los otros componentes también los reciben. El nivel de componentes en la estructura jerárquica no es importante.

Si tiene preguntas sobre este tema o desea que agregue, corrija o elimine algo, escríbalo en los comentarios, en el correo electrónico o en un mensaje personal.

Gracias por su atencion!

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


All Articles