Configuración inicial de la aplicación
Introducción
Esta es una referencia para inicializar una aplicación de Jutro. Puede aprender a crear un archivo de inicialización (convencionalmente llamado startApp.ts o startApp.js), utilizar la función start() para configurar su aplicación y ampliarla con características de inicio adicionales.
Jutro proporciona un sistema avanzado de inicialización de aplicaciones que incluye lo siguiente:
- Compatibilidad total de internacionalización y localización con carga de mensajes.
- Integración del sistema de temas con estilos personalizables.
- Manejo de errores a través de límites de error.
- Enrutamiento del lado del cliente con historial del explorador.
- Administración de la configuración regional a través del almacén de globalización.
- Notificaciones del sistema y administración de modales.
- Integración de autenticación y autorización.
- Características de accesibilidad integradas.
Para ayudarlo a navegar por este sistema, esta página incluye lo siguiente:
- Referencia de API completa para la función
start()junto con ejemplos. - El patrón del archivo de inicialización
startAppy las pautas para estructurarlo. - Ejemplos prácticos de inicialización para situaciones frecuentes.
- Extensión de la inicialización con servicios adicionales, administración de estado y lógica de inicio.
La función start()
La función start() inicializa y renderiza su aplicación de Jutro con todos los proveedores de contexto necesarios para enrutamiento, autenticación, límites de error, internacionalización, entre otros. La función start() requiere dos parámetros:
start(Main, launchProps);
Main: El componente de su aplicación que se convierte en el contenido principal de la aplicación.launchProps: Un objeto de propiedades que configura cómo se inicializa y se comporta la aplicación.
start(Jutro, {
// Launch and initialization settings
rootId: 'root',
config: [config],
// Application structure and behavior
messageLoader: loadMessages,
appName: 'Jutro App',
routerBasename: '/app',
});
Instrucción de importación
import { start } from '@jutro/app';
start() también se pueden importar desde el paquete @jutro/micro-frontends para aplicaciones de microfrontend. Tiene una propiedad mfeData adicional. Para obtener más información, consulte la documentación sobre microfrontends.Configuración de inicio de la aplicación
Estas propiedades controlan el comportamiento de inicio fundamental de la aplicación. Definen dónde se monta la aplicación en el DOM, cargan la configuración, inicializan los servicios y personalizan la experiencia de carga durante el inicio. La función start() procesa directamente esta configuración antes de que se renderice la aplicación.
appDescriptionobligatorio- TipoDescripción
Description of the application. Used for metadata and display purposes, such as in browser titles, accessibility labels, and application information.
rootIdobligatorio- Tipo
stringDescripciónThe ID of the HTML element in
public/index.htmlwhere the application is mounted. The React app renders within this element. config- Tipo
Array<Record<string, unknown>>DescripciónConfiguration array with up to 3 objects passed as arguments to
loadConfiguration(config, params, baseConfig). Objects are spread as separate parameters. disableThemeProvider- Tipo
booleanDescripciónFlag to disable the
ThemeProviderwrapper. If true, the application renders without theme context. identifierPrefix- Tipo
stringDescripciónPrefix for React identifiers passed to
ReactDOMClient.createRoot(). Helps avoid conflicts in multi-app setups. onInit- Tipo
() => voidDescripciónCallback function triggered immediately during
start()initialization, before DOM rendering. Useful for any initialization logic that needs to be performed, for example loading a required service. onRender- Tipo
() => voidDescripciónCallback function triggered after the application component is rendered. Executed via
useEffectin the render wrapper. themeConfig- Tipo
ThemeConfigDescripciónInitial theme configuration passed to ThemeProvider. Defines colors, fonts, and other visual settings.
themeProviderProps- Tipo
ThemeProviderPropsDescripciónAdditional properties passed to the
ThemeProvidercomponent wrapper. Allows customization of theme behavior. trackingConfig- Tipo
TrackingConfigDescripciónTracking configuration for analytics. Used to initialize Datadog and Google Analytics with whitelist and dictionary settings.
Estructura de la aplicación principal
Estas propiedades configuran la estructura principal y las características fundamentales de la aplicación. Definen qué componente se va a renderizar como su aplicación principal, proporcionan metadatos esenciales, configuran el manejo de errores para excepciones no detectadas y habilitan proveedores de contexto para la administración de estado y la integración de características.
appNameobligatorio- TipoDescripción
The name of the application. Used for display and internationalization purposes.
errorBoundary- Tipo
React.ComponentClass<ErrorBoundaryProps>DescripciónCustom error boundary component for the application. Handles uncaught errors and displays fallback UI. Replaces the default
ErrorBoundaryfrom@jutro/components.Valor predeterminado`ErrorBoundary` from `@jutro/components` mfeData- Tipo
{ scopeName: string }DescripciónMicro frontend data passed to the application. Contains scope name for micro frontend identification. Only used in micro frontend contexts. You can pass this property to
start()function only if it is imported from@jutro/micro-frontendspackage. onError- Tipo
ErrorBoundaryProps['onError']DescripciónCallback function triggered when an error occurs. Provides error details and error information.
rootHOCs- Tipo
RootHOCsTypeDescripciónFunction or array of functions that wrap your application to pass context down into it. These HOCs work differently than traditional React HOCs, because they take a
React.ReactNodeas input rather than a component class. For additional details see this section.
Configuración de enrutamiento
Estas propiedades administran el enrutamiento del lado del cliente, el historial de navegación, la configuración del enrutador y el manejo de eventos modales. Controlan cómo la aplicación maneja los cambios de ruta, configura enrutadores personalizados, administra diálogos modales y se integra con el seguimiento analítico de los eventos de navegación.
modalEmitter- Tipo
ModalNextEmitterTypeDescripciónCustom modal emitter instance for managing modal dialogs across the application. Use this when you need to set up event listeners or integrations before the application starts.
Valor predeterminado`new ModalNextEmitter()` Router- Tipo
ComponentType<BrowserRouterProps> | ComponentType<MemoryRouterProps>DescripciónCustom router component for handling navigation. Must accept the same props as
BrowserRouterorMemoryRouter. Use this to override the default router selection, add custom routing behavior (like analytics tracking), or force a specific router type for your environment. If not passed,BrowserRouteris used in browser environments andMemoryRouteris used in test environments. routerBasename- Tipo
stringDescripciónBase URL for all locations in the router. Used when serving the app from a subdirectory instead of the root. A properly formatted basename should have a leading slash, but no trailing slash. It overrides the
JUTRO_ROUTER_BASENAMEenvironment variable orREACT_APP_JUTRO_ROUTER_BASENAMEin the.envfile if they are set.Valor predeterminado'' routerHistory- Tipo
RouterProps['history']DescripciónCustom history object for programmatic navigation and route management. Use this when you need to set up navigation tracking, implement custom navigation guards, perform programmatic navigation before app startup, or integrate with analytics. If not passed,
BrowserHistoryis used in browser environments andMemoryHistoryis used in test environments. trackingCallback- Tipo
RouteTrackerProps['track']DescripciónCallback function for tracking route changes and analytics. Use this when you need to integrate with analytics platforms, track user navigation patterns, monitor page views, or implement custom route-based logging. Called on every route change with
locationandactionparameters.
Globalización
Estas propiedades configuran los aspectos de globalización (g11n), internacionalización (i18n) y localización (l10n) de la aplicación. Administran la carga de mensajes, las preferencias de idioma, la configuración regional y controlan cómo se renderiza el texto internacionalizado en la aplicación.
coreMessageLoader- Tipo
LoaderTypeDescripciónFunction for loading Jutro's built-in core messages for internationalization. Takes a locale string (for example,
'en','es') and returns aRecord<string, string>with core Jutro component messages and labels. If not provided, defaults to a function that logs warnings and returns an empty object, meaning Jutro components use their built-in English messages. Use this when you need to customize or translate Jutro's built-in component labels (buttons, form validation messages, etc.), load core messages from external sources, or provide enhanced translations for Jutro's default UI text. g11nStore- Tipo
G11nStoreDescripciónStore for globalization settings. Includes locale and language preferences.
intlTextComponent- Tipo
IntlConfig['textComponent']DescripciónHTML tag to wrap internationalized messages inside of, such as
'span','div', or'p'. Affects how React Intl's<FormattedMessage>and other formatting components render their output. By default,React.Fragmentis used, which renders text without any wrapper element. Use this when you need consistent HTML structure for all i18n text across your application, require specific semantic elements for accessibility, or need to integrate with CSS frameworks that expect particular HTML structures. messageLoader- Tipo
LoaderTypeDescripciónFunction for loading application-specific messages for internationalization. Takes a locale string (for example,
'en','es') and returns aRecord<string, string>with message keys and translated values. If not provided, defaults to a function that logs warnings and returns an empty object, meaning your app won't have internationalized messages. Use this when you want to load messages from different sources (files, APIs, CDNs), implement custom fallback logic for unsupported locales, or organize messages in non-standard file structures.
Configuración de autenticación
Estas propiedades configuran el comportamiento de autenticación y el manejo de errores de la aplicación. Controlan los proveedores de autenticación personalizados, los componentes de visualización de errores y si la autenticación está habilitada al nivel de la aplicación.
authComponent- Tipo
React.ComponentTypeDescripciónCustom authentication provider component for handling authentication. By default, Jutro uses the built-in
AuthProviderfrom@jutro/authwhich provides standard authentication functionality. Use this when you need custom authentication flows, want to integrate with existing authentication infrastructure, or need mock authentication for development/testing. authErrorComponent- Tipo
AuthRouteProps['authErrorComponent']DescripciónCustom error component to display when authentication errors occur. This component receives one prop:
error(of typeAuthError | undefined) containing the authentication error details. Use this to customize the authentication error display, or integrate error tracking with analytics platforms.Valor predeterminado`AuthErrorPage` from `@jutro/app` disableAuthErrorsHandling- Tipo
booleanDescripciónFlag to disable authentication error handling.
disableAuthForApplicationRoot- Tipo
booleanDescripciónFlag to disable authentication for the application root. If true, application root will not be wrapped with secure route handlers.
Funciones de la interfaz de usuario y experiencia del usuario
Estas propiedades configuran las funciones de la interfaz de usuario y los aspectos de presentación de la aplicación. Administran las capacidades esenciales de la interfaz de usuario, como notificaciones, modales, estados de carga y características de accesibilidad que mejoran la experiencia del usuario.
disableModalProvider- Tipo
booleanDescripciónFlag to disable the ModalProvider wrapper around the application. By default, Jutro wraps your application with a
ModalProviderto manage modal dialogs. Use this when you want to provide your own modal management system or integrate with a third-party modal library. disableToastProvider- Tipo
booleanDescripciónFlag to disable the ToastProvider wrapper around the application. By default, Jutro wraps your application with a
ToastProviderto enable toast notifications throughout your app. Use this when you want to provide your own toast notification system or integrate with a third-party notification library. hideSkipNavigation- Tipo
booleanDescripciónFlag to hide the skip navigation link for accessibility. By default, Jutro includes a skip navigation link to help keyboard and screen reader users quickly navigate to main content. Use this when your application implements its own skip navigation mechanism.
loaderComponent- Tipo
React.ElementTypeDescripciónThe component for wrapping the main component and presenting a loader UI when the app is loading. Replaces the default loader. Use this when you want to customize the loading experience, implement custom loading animations, or show different loader variants based on application state.
Valor predeterminado`Loader` from @jutro/components mainComponentProps- Tipo
Record<string, unknown>DescripciónAdditional props to pass to the main application component. These props are spread and passed directly to your main component as React component props. Use this when you need to pass custom configuration, event handlers, or data to your main application component without modifying the component itself.
modalFunctions- Tipo
ModalFunctionsDescripciónCustom modal functions for managing modal behavior. Allows you to provide custom functions for opening, closing, and managing modal dialogs. Use this when you need to customize modal lifecycle behavior, implement modal state persistence, integrate with analytics platforms for modal events, or add custom validation before opening or closing modals.
toastTrigger- Tipo
ToastTriggerDescripciónCustom toast trigger function for displaying notifications. By default, Jutro uses the built-in toast trigger from
@jutro/components. Use this when you need custom notification behavior, want to integrate with external notification systems, implement custom toast styling or animations, or need to add custom logging or analytics to toast events.
Inicialización de la aplicación
Para inicializar una aplicación de Jutro, cree un archivo startApp.ts (o startApp.js). Este archivo se importa de forma convencional y se lo llama desde el punto de entrada de Webpack (src/index.ts).
Ejemplo de inicialización básica
Esta es la configuración mínima necesaria para inicializar una aplicación de Jutro:
import { start } from '@jutro/app';
import { loadConfiguration } from '@jutro/config';
import { Jutro } from './app/App';
import appConfig from './config/config.json';
import messages from './app/App.messages';
import { loadAppMessages, loadCoreMessages } from './messagesLoaders';
// Load configuration before starting the app
loadConfiguration(appConfig);
// Export the startApp function
export const startApp = (): void => {
// Initialize the application
start(Jutro, {
rootId: 'root',
messageLoader: loadAppMessages,
coreMessageLoader: loadCoreMessages,
appName: messages.appName,
appDescription: messages.appDescription,
});
};
Inicialización para aplicaciones de microfrontend
Cuando compile aplicaciones de microfrontend, startApp recibe mfeData que contiene un contexto de shell:
import '@jutro/theme';
import './styles/index.scss';
import { MfeData, start } from '@jutro/micro-frontends';
import { loadConfiguration } from '@jutro/config';
import { Jutro } from './app/App';
import appConfig from './config/config.json';
import messages from './app/App.messages';
import { loadAppMessages, loadCoreMessages } from './messagesLoaders';
loadConfiguration(appConfig);
export const startApp = (mfeData?: MfeData): void => {
start(Jutro, {
rootId: 'root',
messageLoader: loadAppMessages,
coreMessageLoader: loadCoreMessages,
appName: messages.appName,
appDescription: messages.appDescription,
mfeData, // Pass shell context to the app
});
};
Estrategias de carga de configuración
Hay dos métodos para cargar la configuración en la aplicación de Jutro: cargarla explícitamente mediante loadConfiguration() antes de llamar a start() o pasar la propiedad config a start(). Cada método tiene diferentes casos de uso y es importante entender cuándo usar cada uno.
Método 1: carga explícita de la configuración
Llame a loadConfiguration() antes de start(). Este método le da control total sobre la configuración y es ideal cuando necesita realizar una combinación personalizada, configuraciones específicas para el entorno o sustitución de parámetros de plantilla. Consulte más detalles sobre la configuración en la sección Extensión de la inicialización.
import appConfig from './config/config.json';
import featureFlags from './config/featureFlags.json';
import { loadConfiguration } from '@jutro/config';
// Merge multiple config files into a single configuration object
const combinedConfig = {
...appConfig,
...featureFlags,
// Add environment-specific overrides
API_BASE_URL: process.env.REACT_APP_API_BASE_URL || 'http://localhost:3000',
FEATURE_NEW_DASHBOARD: process.env.REACT_APP_FEATURE_NEW_DASHBOARD === 'true',
};
// Parameters for template substitution (optional)
const templateParams = {
environment: process.env.NODE_ENV,
version: process.env.REACT_APP_VERSION || '1.0.0',
};
// Load configuration with optional template parameters
loadConfiguration(combinedConfig, templateParams);
export const startApp = (): void => {
start(Jutro, {
rootId: 'root',
messageLoader: loadAppMessages,
coreMessageLoader: loadCoreMessages,
appName: messages.appName,
appDescription: messages.appDescription,
// Config prop is not passed here
});
};
Método 2: configuración con la propiedad de configuración
Pase la configuración directamente a la función start() a través de la propiedad config. La función start() llamará a loadConfiguration() internamente. Use este método más simple cuando tenga un solo archivo de configuración sin necesidad de procesamiento adicional:
import appConfig from './config/config.json';
export const startApp = (): void => {
start(Jutro, {
rootId: 'root',
config: [appConfig], // Configuration loaded by start()
messageLoader: loadAppMessages,
// ... other props
});
};
Evite mezclar los métodos de configuración
No llame a loadConfiguration() y pase, a la vez, la propiedad config en la misma función startApp. Si lo hace, se llamará dos veces a loadConfiguration(). Una vez desde su llamada explícita y otra internamente por start(). La segunda llamada sobrescribirá la primera, por ellos, se podrían perder datos importantes de configuración:
Ejemplo de cómo no inicializar la configuración:
loadConfiguration(appConfig); // First call
start(Jutro, {
config: [appConfig], // Triggers second loadConfiguration() call - overwrites the first!
// ... other props
});
Extensión de la inicialización
Más allá de la configuración básica, puede extender el archivo startApp para incluir configuración avanzada, inicialización de servicio y lógica personalizada. En esta sección, se abordan los patrones de expansión comunes.
Importaciones de módulos
Más allá de las importaciones básicas de temas y hojas de estilo, puede expandir la sección de importaciones de módulos para que incluyan bibliotecas, utilidades y servicios adicionales que requiera su aplicación. Las expansiones comunes incluyen lo siguiente:
- Bibliotecas de supervisión y análisis. Importe servicios de terceros como Datadog, Google Analytics o utilidades de seguimiento personalizadas.
- Compatibilidad con componentes heredados. Agregue capas de compatibilidad para componentes de Jutro más antiguos.
- Personalizaciones de enrutamiento. Importe utilidades del historial como
createBrowserHistorypara configuraciones personalizadas de enrutador. - Utilidades de la aplicación. Cargue funciones de utilidad personalizadas, ayudantes de transformación de datos o herramientas específicas de la aplicación.
- Metadatos del paquete. Importe
package.jsonpara la información de la versión utilizada en la supervisión o la depuración.
Ejemplo de importaciones de módulos expandidos
import '@jutro/theme';
import './styles/index.scss';
import { start } from '@jutro/app';
import { datadogRum } from '@datadog/browser-rum';
import { configureLegacyComponentMap } from '@jutro/legacy/uiconfig';
import { createBrowserHistory } from 'history';
import packageJson from '../package.json';
El principio clave es importar los módulos en el orden en que se necesitan, con las utilidades de configuración y la inicialización del servicio antes de la llamada a la función start().
Ajustes de la configuración
Más allá de cargar un solo archivo config.json, puede ampliar los ajustes de la configuración para manejar ajustes complejos de aplicaciones, valores específicos del entorno y la configuración del tiempo de ejecución. Las opciones de expansión de la configuración incluyen lo siguiente:
- Varios archivos de configuración. Cargue diferentes archivos de configuración para diferentes aspectos (funciones, terminales de la API, configuración de la interfaz de usuario).
- Configuración específica del entorno. Cargue diferentes configuraciones en función del entorno de implementación.
- Configuración de tiempo de ejecución. Establezca valores de configuración dinámicamente en función de condiciones o de los datos externos.
- Indicadores de funciones. Habilite o deshabilite funciones a través de la configuración.
- Validación de la configuración. Valide los valores de configuración antes de iniciar la aplicación.
Ejemplo de ajustes de configuración ampliados
import appConfig from './config/config.json';
import featureFlags from './config/featureFlags.json';
import { loadConfiguration } from '@jutro/config';
// Merge multiple config files into a single configuration object
const combinedConfig = {
...appConfig,
...featureFlags,
// Add environment-specific overrides
API_BASE_URL: process.env.REACT_APP_API_BASE_URL || 'http://localhost:3000',
FEATURE_NEW_DASHBOARD: process.env.REACT_APP_FEATURE_NEW_DASHBOARD === 'true',
};
// Parameters for template substitution (optional)
const templateParams = {
environment: process.env.NODE_ENV,
version: process.env.REACT_APP_VERSION || '1.0.0',
};
// Load configuration with optional template parameters
loadConfiguration(combinedConfig, templateParams);
La función loadConfiguration() acepta hasta tres argumentos: el objeto de configuración principal, parámetros de plantilla opcionales para la sustitución de variables utilizando la sintaxis de Mustache y una configuración base opcional.
baseConfig, ya que está obsoleto. Se recomienda combinar configuraciones manualmente antes de llamar a loadConfiguration(), en lugar de confiar en la lógica de combinación interna de la función.Inicialización del servicio
Después de los ajustes de configuración y antes de llamar a start(), se pueden inicializar los servicios externos, las herramientas de supervisión y las utilidades específicas que necesita la aplicación. Las inicializaciones de servicios frecuentes incluyen las siguientes:
- Supervisión y análisis. Inicialice servicios de seguimiento como Google Analytics, Datadog RUM o soluciones de supervisión personalizadas.
- Compatibilidad con componentes heredados. Configure capas de compatibilidad para componentes de Jutro más antiguos con
configureLegacyComponentMap(). - Comportamiento del servicio basado en el entorno. Habilite o deshabilite los servicios de forma condicional en función del entorno (por ejemplo, análisis solo en producción, herramientas de depuración solo en desarrollo).
- Inicialización de servicios de terceros. Configure servicios externos que requieran inicialización de tiempo de ejecución antes de que se inicie la aplicación.
Ejemplo de inicialización de servicio expandido
import { datadogRum } from '@datadog/browser-rum';
import { configureLegacyComponentMap } from '@jutro/legacy/uiconfig';
import { warning } from '@jutro/logger';
import packageJson from '../package.json';
// Configure legacy component support
configureLegacyComponentMap();
// Environment-specific setup
const deployEnv = process.env.REACT_APP_DEPLOY_ENV || 'development';
// Initialize monitoring (Datadog RUM example)
datadogRum.init({
applicationId: process.env.REACT_APP_DATADOG_RUM_APPLICATION_ID as string,
clientToken: process.env.REACT_APP_DATADOG_RUM_CLIENT_TOKEN as string,
site: 'datadoghq.com',
service: 'my-jutro-app',
version: packageJson.version,
env: deployEnv,
sessionSampleRate: 100,
sessionReplaySampleRate: 20,
trackUserInteractions: true,
defaultPrivacyLevel: 'mask-user-input',
trackResources: true,
trackLongTasks: true,
// Configure distributed tracing for supported APIs
allowedTracingUrls: [process.env.REACT_APP_API_BASE_URL].filter(Boolean),
});
// Development-specific warnings
if (process.env.NODE_ENV !== 'production') {
warning(
`App running with NODE_ENV=${process.env.NODE_ENV} which may impact performance.`
);
}
Prácticas recomendadas para la inicialización de servicios
- Verificaciones de entorno. Utilice variables de entorno para inicializar servicios condicionalmente (evite inicializar seguimientos en desarrollo).
- Manejo de errores. Encapsule la inicialización del servicio en bloques try-catch (intento/captura) para evitar errores de inicio.
- Dependencias de orden. Inicialice los servicios en el orden correcto en función de sus dependencias.
- Validación de la configuración. Valide las variables de entorno necesarias antes de inicializar los servicios.
- Reducción del desempeño correcta. Permite que la aplicación se inicie incluso si los servicios no críticos no se inicializan.
Ajuste de la internacionalización
La inicialización predeterminada proporciona un ajuste completo de la internacionalización, lo que incluye la carga separada de mensajes principales y de la aplicación, la gestión del almacén de globalización y la configuración regional basada en la configuración. Puede extender esto configurando un almacén de globalización o cargadores de mensajes personalizados:
import { createG11nLocalStorageStore } from '@jutro/locale';
const g11nStore = createG11nLocalStorageStore({
name: 'my-app-g11n-store',
});
export const startApp = (): void => {
start(MyApp, {
rootId: 'root',
messageLoader: loadAppMessages,
coreMessageLoader: loadCoreMessages,
g11nStore, // Enable globalization store
appName: messages.appName,
appDescription: messages.appDescription,
});
};
Para revisar las posibilidades de configuración adicionales, consulte la documentación de i18n e Interacción con el almacén de g11n.
Ejemplos de configuración avanzada
Personalización del componente de carga
Utilice la propiedad loaderComponent para reemplazar el cargador predeterminado por uno personalizado:
import { Loader } from '@jutro/components';
const CustomLoader = ({ loaded, children }) => {
if (!loaded) {
return (
<div style={{ textAlign: 'center', padding: '2rem' }}>
<h1>Loading Application...</h1>
<Loader />
</div>
);
}
return children;
};
start(MyApp, {
loaderComponent: CustomLoader,
// ... other configuration
});
Ejecución de la lógica de inicialización antes del inicio
Utilice la devolución de llamada onInit para ejecutar el código de configuración antes de que la aplicación renderice:
start(MyApp, {
onInit: () => {
// Initialize services before app starts
// This runs synchronously, before DOM rendering
initializeCustomAnalytics();
setupLogger();
validateEnvironmentConfig();
},
// ... other configuration
});
Orden de ejecución:
- Se carga la configuración a través de
loadConfiguration(). - Se llama a
onInit(). - Validación del elemento de DOM y creación de la raíz de React.
- Renderizado y montaje de componentes.
- Se llama a
onRender()(si estuviera).
Prácticas recomendadas para onInit:
- Utilice
onRenderen su lugar si necesita ejecutar código después de la renderización. - Cualquier error arrojado evitará que la aplicación se inicie.
- Utilícelo para la inicialización crítica que debe tener lugar antes de que se renderice la interfaz de usuario.
Ejecución de la lógica después de la renderización
Utilice la devolución de llamada onRender para ejecutar código después de que se renderice el componente de la aplicación:
start(MyApp, {
onRender: () => {
// This runs after React rendering completes
// Ideal for non-critical initialization, analytics, or tracking
logApplicationStartTime();
initializeOptionalFeatures();
},
// ... other configuration
});
Cuándo se lo debe utilizar onRender:
- Inicialización no crítica que no bloquea el inicio.
- Análisis o telemetría.
- Evaluación del indicador de función.
- Inicialización de función opcional.
HOC (componentes de orden superior) raíz
La propiedad rootHOCs pasada a start() permite encapsular su aplicación con proveedores de contexto adicionales. Acepta una función (o una matriz de funciones) que toma un React.ReactNode como entrada y devuelve una versión encapsulada.
rootHOCs no acepta el patrón tradicional HOC según se define en React. Se limita a tomar un solo argumento de tipo React.ReactNode, en lugar de una clase de componente.Patrones de rootHOCs válidos
// Valid: Takes a ReactNode and returns JSX
const withCustomProvider = (node: React.ReactNode) => {
return <CustomContext.Provider value={config}>{node}</CustomContext.Provider>;
};
start(MyApp, {
rootHOCs: [withCustomProvider],
// ... other configuration
});
Patrones de rootHOCs no válidos
// Invalid: Traditional HOC pattern - wraps components, not nodes
const withDivHOC = (Component: React.ComponentType) => {
const Wrapper = (props) => (
<div>
<Component {...props} />
</div>
);
return Wrapper;
};
// This will not work with rootHOCs
start(MyApp, {
rootHOCs: [withDivHOC],
});
Patrones de configuración comunes
Incorporación de la gestión de estado con Redux
Use la propiedad rootHOCs para encapsular su aplicación con un proveedor de almacén de Redux:
import { Provider } from 'react-redux';
import { configureStore } from '@reduxjs/toolkit';
const store = configureStore({ reducer: yourReducer }); // Your Redux store configuration
start(RatingApp, {
messageLoader: loadMessages,
appName: messages.appName,
// Wrap application with Redux store
rootHOCs: [(body) => <Provider store={store}>{body}</Provider>],
// ... other configuration
});