React Academy · Lección

Compartir estado y enrutamiento entre remotos

Comparta una única instancia de React Router y un almacén de Zustand entre microfrontends implementados de forma independiente.

Lección 3 de 413 pasos

Compartir estado y enrutamiento entre remotos es una lección gratuita de React Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.

El desafío de compartir el estado

Cada remote de Module Federation es una aplicación compilada y desplegada de forma independiente. Su estado (React useState, Context y stores de Zustand) reside en su propio ámbito de módulo JavaScript. El host y los remotes no comparten el estado automáticamente; debe diseñar explícitamente esta integración.

Opción 1: la URL como estado compartido

El mecanismo más sencillo para compartir el estado es la URL: cualquier remote puede leer los parámetros de URL, las cadenas de consulta y los valores hash sin comunicación entre remotes. Esto funciona muy bien para el estado de navegación principal, los valores de filtros y cualquier estado que deba poder guardarse en marcadores y compartirse mediante un enlace.

Opción 2: CustomEvents para un acoplamiento flexible

Los CustomEvents, mediante el EventTarget del navegador, permiten que los remotes se comuniquen sin imports directos. Un remote ejecuta window.dispatchEvent(new CustomEvent('cart:updated', { detail: cart })), y cualquier otro módulo (el host u otros remotes) escucha mediante window.addEventListener('cart:updated', handler). No se necesita ningún módulo compartido.

Opción 3: un remote de estado compartido

Cree un "state remote" dedicado que exponga un store de Zustand o Jotai. Tanto el host como los demás remotes importan desde este state remote y obtienen la misma instancia del store, ya que es un singleton compartido. Esto resulta muy potente para estados compartidos complejos (autenticación, carrito y preferencias del usuario), pero añade una dependencia de despliegue.

Opción 4: el host administra el estado y pasa callbacks

El shell (host) administra todo el estado compartido y lo pasa a los remotes mediante props o Context. Los remotes reciben callbacks como onCartUpdate y navigate mediante props. Esto mantiene el estado centralizado en el host, pero obliga al host a conocer las API de los remotes, lo que crea un acoplamiento estrecho.

React Router en Module Federation

El estado del historial y de la ubicación de React Router lo proporciona un componente Router (BrowserRouter o createBrowserRouter). En una configuración de Module Federation debe existir exactamente un Router; colocarlo en cada remote crearía varios contextos de enrutamiento en conflicto y provocaría problemas de navegación.

El host administra el Router

La regla arquitectónica es la siguiente: el host (shell) proporciona el Router. Los remotes reciben las props de enrutamiento del host o leen directamente la URL. Un remote nunca debe crear su propio BrowserRouter, ya que entraría en conflicto con el Router del host y rompería la navegación de toda la aplicación.

Compartir Context entre remotes

Los valores de React Context están vinculados a una instancia específica de React y a un objeto Context. Para que un Context funcione entre el host y un remote, ambos deben importar el mismo objeto Context desde el mismo origen, normalmente el remote de estado compartido o un paquete de utilidades compartido. El singleton de React garantiza que el mismo Context funcione en todos los remotes.

Patrón de arquitectura del shell

En una arquitectura limpia de Module Federation, el shell (host) administra el shell HTML, el proveedor del Router, el Context de autenticación, el proveedor del tema y de los tokens de diseño, y la navegación global. Los remotes administran el contenido de sus respectivos dominios funcionales. El shell integra los remotes en el diseño sin conocer los detalles de su implementación.

Cómo evitar el acoplamiento estrecho

El antipatrón más grave de Module Federation es el acoplamiento estrecho entre el host y los remotes: el host importa tipos del remote, el remote importa componentes del host o ambos comparten un paquete npm que deben actualizar simultáneamente. Estos acoplamientos contradicen el objetivo del despliegue independiente.

Contratos de comunicación

Defina contratos explícitos entre el host y los remotes: las props que acepta un componente remoto, los CustomEvents que envía y los parámetros de URL que lee. Documente estos contratos como interfaces de TypeScript en un paquete de tipos compartido. Así, los equipos pueden evolucionar de forma independiente dentro del contrato acordado.

Ubicación de React Router en Module Federation

¿Dónde debe colocarse el proveedor de React Router (BrowserRouter) en una arquitectura de Module Federation?

Resumen de la lección

Para compartir el estado entre remotes de Module Federation puede usar el estado de la URL (la opción más sencilla), CustomEvents (con acoplamiento flexible), un remote de estado compartido (store centralizado) o un estado administrado por el host y pasado mediante props. El host debe administrar el único proveedor del Router; los remotes nunca deben crear uno propio. Los contratos de comunicación claros mediante interfaces de TypeScript mantienen desacoplados a los equipos y permiten un verdadero despliegue independiente.

Gratis para empezar

Aprende React con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
88
Lecciones
324

Preguntas frecuentes

¿La lección «Compartir estado y enrutamiento entre remotos» es gratis?

Sí — el texto completo de «Compartir estado y enrutamiento entre remotos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Compartir estado y enrutamiento entre remotos»?

Comparta una única instancia de React Router y un almacén de Zustand entre microfrontends implementados de forma independiente. Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar React Academy?

No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Compartir estado y enrutamiento entre remotos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de React Academy?

Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Module Federation: importaciones dinámicas en tiempo de ejecución
  2. Configuración de aplicaciones React host y remotas
  3. Compartir estado y enrutamiento entre remotos
  4. Control de versiones, despliegue y orquestación
← Volver a React Academy