Carga de aplicaciones
Este capítulo explica cómo usar createRemoteAppComponent para cargar e integrar aplicaciones React remotas en una aplicación host.
¿Qué es createRemoteAppComponent?
createRemoteAppComponent es la API principal de React Bridge para cargar aplicaciones React remotas. Ofrece:
- Lazy loading automático: carga los remotes solo cuando se necesitan
- Gestión del ciclo de vida: gestiona el montaje y desmontaje automáticamente
- Integración con el router: se integra con React Router y admite la inyección de basename
- Gestión de errores: soporte integrado de fallback para errores de carga y de runtime
- Estilos: admite
className/styleen el componente contenedor
Instalación
Uso básico
Paso 1: Configurar los módulos remotos
Añade la configuración de remotes a la configuración de Module Federation de la aplicación host.
El siguiente ejemplo usa la configuración de Rsbuild. Ajústalo según tu herramienta de build:
- Rsbuild:
@module-federation/rsbuild-plugin - Rspack:
@module-federation/enhanced/rspack - Webpack:
@module-federation/enhanced/webpack - Vite:
@module-federation/vite:::
:::tip
Si el remote usa el bridge de React 18/19, asegúrate de configurar también la sección shared con la forma de prefijo con barra final ('react-dom/') para que react-dom/client se comparta correctamente.
Paso 2: Crear los componentes remotos
Definir los componentes de carga y de error
Crear el componente de la aplicación remota
Configuración del router de la aplicación principal
Props del componente remoto
Props del router
basename: establece la ruta base de la aplicación remotamemoryRoute: configuración del memory router
Props de estilo
style:React.CSSPropertiesclassName:string
Soporte de ref
ref:React.Ref<HTMLDivElement>(se reenvía al contenedor interno)
Paso de datos
- Pasa props directamente (por ejemplo,
userId="123") o mediante el objetoprops.
Referencia de la API createRemoteAppComponent
Firma de la función
RemoteComponentParams<T, E>
RemoteComponentProps<T>
Detalles de los parámetros
loader
- Tipo:
() => Promise<T> - Obligatorio: Sí
- Descripción: carga el objeto del módulo remoto
- Ejemplos:
loading
- Tipo:
React.ReactNode - Obligatorio: Sí
- Descripción: UI que se muestra mientras se carga el remote
- Ejemplos:
fallback
- Tipo:
React.ComponentType<{ error: Error }> - Obligatorio: Sí
- Descripción: UI que se muestra cuando falla la carga o el renderizado; recibe
error - Ejemplos:
export
- Tipo:
E extends keyof T - Obligatorio: No
- Valor por defecto:
'default' - Descripción: selecciona qué export del módulo remoto cargado se renderiza
Ejemplo: si tu módulo remoto exporta:
Uso en el host:
Optimización del tamaño del bundle
Explicación de la dependencia de React Router
Por defecto, @module-federation/bridge-react incluye react-router-dom en tu bundle para ofrecer:
- Inyección automática de basename
- Paso del contexto del router
- Soporte de rutas anidadas
Si no necesitas la integración con React Router (o usas otro router), deshabilita enableBridgeRouter para reducir el tamaño del bundle (unos ~3KB con gzip) y evitar una integración con el router innecesaria.
Cómo deshabilitar la dependencia del router
Por defecto, Bridge habilita el soporte del router para ofrecer la mejor experiencia de desarrollo y compatibilidad. Cuando estableces enableBridgeRouter: false, el plugin cambia automáticamente a un build que no incluye react-router-dom, lo que reduce el tamaño de tu bundle.
El plugin resuelve automáticamente los imports de @module-federation/bridge-react a @module-federation/bridge-react/base. Esa entrada no incluye react-router-dom en el bundle, así que no hace falta cambiar el código.