Carga diferida y precarga de componentes
Este capítulo explica cómo usar createLazyComponent para cargar bajo demanda componentes remotos de React en una aplicación host.
createLazyComponent es una API de carga de más alto nivel para escenarios con componentes de React. En lugar de cargar directamente un módulo y conectar tú mismo React.lazy, Suspense y los error boundaries, esta API ya integra esas piezas y además ofrece:
- Carga y fallback declarativos: no necesitas envolver manualmente
React.Suspenseni los error boundaries - Precarga de datos: usa
prefetchpara iniciar las peticiones de dependencias antes de que se cargue el componente, evitando cascadas de peticiones en las que los datos solo se solicitan cuando el componente ya está listo - Control de SSR: controla con precisión si los componentes remotos se renderizan en el servidor, lo que ayuda a evitar problemas de parpadeo de CSS
Instalación
Uso básico
Paso 1: registrar lazyLoadComponentPlugin
Registra el plugin lazyLoadComponentPlugin en runtime para habilitar las API createLazyComponent y prefetch.
Paso 2: llamar a createLazyComponent
Tras registrar el plugin lazyLoadComponentPlugin, puedes crear componentes con carga diferida mediante el método instance.createLazyComponent.
Referencia de la API createLazyComponent
Firma de la función
createLazyComponent
Para poder llamar a esta API, primero debes registrar el plugin lazyLoadComponentPlugin.
Type declaration
Además de cargar componentes, esta función también ofrece las siguientes capacidades:
- En modo SSR, inyecta las etiquetas de estilo y los recursos de script del producer correspondiente, lo que ayuda a evitar los problemas de parpadeo de CSS causados por el renderizado en streaming y acelera el PID (First Paint Interactive Time).
- Si el producer tiene una función de obtención de datos, la llama automáticamente e inyecta los datos.
loader
- Tipo:
() => Promise<T> - Obligatorio: Sí
- Valor por defecto:
undefined
Función que carga los componentes remotos, normalmente ()=>loadRemote(id) o ()=>import(id).
loading
- Tipo:
React.ReactNode - Obligatorio: Sí
- Valor por defecto:
undefined
Define el estado de carga del módulo.
delayLoading
- Tipo:
number - Obligatorio: No
- Valor por defecto:
undefined
Define, en milisegundos, el retraso antes de mostrar el estado de carga. Si la carga tarda menos que este tiempo, el estado de carga no se muestra.
fallback
- Tipo:
(({ error }: { error: ErrorInfo}) => React.ReactElement) - Obligatorio: Sí
- Valor por defecto:
undefined
Componente de error que se renderiza cuando falla la carga o el renderizado del componente.
export
- Tipo:
string - Obligatorio: No
- Valor por defecto:
'default'
Si el componente remoto es una exportación con nombre, puedes indicar con este parámetro el nombre del componente que se exporta. Por defecto, se carga la exportación por defecto.
dataFetchParams
- Tipo:
DataFetchParams - Obligatorio: No
- Valor por defecto:
undefined
Si el componente remoto tiene una función de obtención de datos, este valor se le pasará cuando esté definido.
noSSR
- Tipo:
boolean - Obligatorio: No
- Valor por defecto:
false
Si se establece en true, el componente no se renderizará en escenarios SSR.
injectScript
- Tipo:
boolean - Obligatorio: No
- Valor por defecto:
false
En un entorno SSR, si se establece en true, el componente creado inyectará los recursos de script correspondientes.
Por ejemplo, si remote/button tiene __federation_button.js, en el HTML que devuelve el SSR se inyectará el script correspondiente antes del componente para acelerar la interactividad.
injectLink
- Tipo:
boolean - Obligatorio: No
- Valor por defecto:
true
En un entorno SSR, si se establece en true, el componente creado inyectará los enlaces a los recursos de estilo correspondientes.
Por ejemplo, si remote/button tiene __federation_button.css, en el HTML que devuelve el SSR se inyectará el link correspondiente antes del componente para evitar parpadeos en la página.
prefetch
Para poder llamar a esta API, primero debes registrar el plugin lazyLoadComponentPlugin.
Type declaration
Precarga los archivos de recursos del componente y su data loader.
id
- Tipo:
string - Obligatorio: Sí
- Valor por defecto:
undefined
El id del componente que se va a precargar.
preloadComponentResource
- Tipo:
boolean - Obligatorio: No
- Valor por defecto:
false
Indica si se deben precargar los archivos de recursos del componente.
dataFetchParams
- Tipo:
DataFetchParams - Obligatorio: No
- Valor por defecto:
undefined
Si el componente remoto tiene una función de obtención de datos, este valor se le pasará cuando esté definido.