Uso
Descripción general
El componente límite de error es un componente encapsulador que acepta componentes secundarios y algunas personalizaciones opcionales. Cuando un componente secundario se renderiza normalmente, el componente límite de error no hace nada. Sin embargo, si un componente secundario genera un error durante la renderización, el componente límite de error se activa y reemplaza este componente por una interfaz de usuario de error predefinida.

En su estructura interna, el componente límite de error detecta los errores de JavaScript lanzados por los componentes de React y los informa a los eventos de Jutro de forma predeterminada, pero este comportamiento puede modificarse si fuera necesario. También presenta una acción de recuperación y evita que toda la aplicación se bloquee.
La interfaz de usuario de error consta de un ícono, un texto de error, un texto de error detallado y un botón de acción. Puede personalizar a todos ellos y puede utilizar el componente en cualquier lugar de la aplicación. De manera predeterminada, se usa alrededor de la aplicación de plantilla de Jutro y también encapsula todos los microfrontends. Todos los parámetros para el componente límite de error y los ejemplos de los diferentes estilos, como tarjeta o altura completa, se encuentran en Storybook.
Encapsulado de un componente con límite de error
Puede encapsular cualquier componente en un componente límite de error. Sin embargo, le recomendamos utilizarlo principalmente para componentes que dependen de llamadas de red o interactúan con API o bases de datos, ya que es más probable que presenten errores. Un componente se encapsula con un componente límite de error de la siguiente manera:
const MyComponentWithBoundary = (props) => (
<ErrorBoundary noticeStyle="card">
<MyComponent {...props} />
</ErrorBoundary>
);
Personalización
Todas las partes del componente límite de error se pueden personalizar usando metadatos o JSX, y también se puede decidir si mostrar cualquier error técnico que haya arrojado un componente secundario.
Por ejemplo, los metadatos se pueden configurar para que el error técnico representado por la propiedad showErrorMessage se vea de la siguiente manera:
{
"id": "generated-f620b8f5-44fd-43a4-b828-1a88a51c80f5",
"type": "container",
"component": "ErrorBoundary",
"content": [
{
"id": "generated-fb18c51a-a30e-4488-a66a-8d99d948c24f",
"type": "element",
"component": "BadComponent"
}
],
"componentProps": {
"showErrorMessage": true
}
}
Lo mismo puede hacerse en JSX al pasar una propiedad adicional, showErrorMessage, de esta manera:
const BasicTemplate: ErrorBoundaryStory = (args) => (
<ErrorBoundary
showErrorMessage
{...args}>
<BadComponent />
</ErrorBoundary>
);
Es posible pasar y personalizar del mismo modo otras propiedades, como noticeStyle, mainMessage, detailedMessage y actions, con sus respectivas funciones de devolución de llamada.
También puede reemplazar el componente de interfaz de usuario de error predeterminado por un componente personalizado. Consulte Storybook para obtener más ejemplos de personalización.
Código
<ErrorBoundary>
<BadComponent />
</ErrorBoundary>
Instrucción de importación
import { ErrorBoundary } from '@jutro/components';
Contrato de componentes
Asegúrese de comprender la superficie de la API de componentes del sistema de diseño, así como sus implicaciones, ventajas y desventajas. Obtenga más información en nuestra introducción a la API de componentes.
Propiedades
Note: También puede incluir el paso de propiedades para su componente de respaldo en un límite de error. Si utiliza el componente de respaldo predeterminado, consulte la tabla de propiedades del componente de aviso de error para conocer una lista de propiedades adicionales. childrenobligatorio
DescripciónChildren to be wrapped by the error boundary.
fallbackComponent
DescripciónAn optional custom component to render when an error occurs.
Valor predeterminado[ErrorNotice](#error-notice-properties)
onError
DescripciónAn optional action to be triggered when errors occur.
Valor predeterminadojutroEventsReporter
Propiedades de aviso de error
Estas propiedades adicionales estarán disponibles si se utiliza el valor predeterminado para el componente de respaldo.
actions
Tipo{label: IntlMessageShape, callback: func}[]
DescripciónAn array of label-callback objects to be displayed as recovery action buttons. See IntlMessageShape for details on the type for the label property.
Valor predeterminado{label: 'Reload Page', callback: () => window.location.reload()}[]
detailedMessage
DescripciónA more detailed message to be displayed below the main message on the error UI.
Valor predeterminado'We were not able to recover from the situation automatically. Please reload the page.'
error
DescripciónThe error object with technical information.
icon
DescripciónAn Icon component to render on the component. The value must be an Icon component or the icon's name. For example, CheckIcon or 'gw-check'.
Valor predeterminadoErrorOutlineIcon
mainMessage
DescripciónThe main message to be displayed to the user on the error UI.
Valor predeterminado'Something went wrong with a component'
noticeStyle
Tipo'card' | 'plain' | 'fullHeight'
DescripciónThe notice container visual style.
Valor predeterminado'plain'
showErrorMessage
DescripciónIf set to true, the error message from the Error object will be shown.
Ganchos
No hay ganchos para Límite de error.
Claves de traducción
Las siguientes claves de traducción se definen para el componente aviso de error que se utiliza como valor predeterminado para el componente de respaldo:
No hay traducciones para Límite de error.
Para obtener información sobre cómo gestionar las traducciones, consulte nuestra sección sobre internacionalización.
Escotillas de escape
Para obtener más información, consulte nuestra documentación sobre escotillas de escape.
Ejemplos
Consulte la sección Uso para obtener detalles sobre cómo diseñar un límite de error correctamente y las diferentes opciones de configuración que ofrecemos.
Ejemplo de límite de error básico
Los límites de error son encapsuladores que renderizarán un componente de respaldo si uno de sus elementos secundarios tiene un error.
<ErrorBoundary>
<BadComponent />
</ErrorBoundary>
Ejemplo de personalización
Puede pasar propiedades al componente de límite de error que se pasarán a su componente de respaldo.
<ErrorBoundary
noticeStyle="card"
showErrorMessage>
<BadComponent />
</ErrorBoundary>
Ejemplo de respaldo simple personalizado
Puede definir su propio componente de respaldo para renderizarlo cuando se produzca un error.
function AlternateFallback () {
return (
<strong>An error occurred.</strong>
)
}
...
<ErrorBoundary fallbackComponent={AlternateFallback}>
<BadComponent/>
</ErrorBoundary>
Respaldo personalizado con ejemplo de mensaje de error
Se pasará un objeto al componente de respaldo que contiene el objeto JavaScript error como una de sus propiedades.
function AlternateFallback({error}) {
return (
<span><strong>An error occurred:</strong> {error.message}</span>
)
}
...
<ErrorBoundary fallbackComponent={AlternateFallback}>
<BadComponent/>
</ErrorBoundary>
Respaldo personalizado con ejemplo de propiedades
Las propiedades adicionales pasadas al componente límite de error se agregarán como propiedades para el componente pasado a fallbackComponent.
function MakeToast(error) {
ToastProvider.toast({
message: error.message,
autoClose: 3000,
type: "error",
});
}
function AlternateFallback({error, buttonLabel}) {
return (
<>
<ToastProvider />
<Button label={buttonLabel} onClick={(error) => MakeToast(error)}/>
</>
)
}
...
<ErrorBoundary
fallbackComponent={AlternateFallback}
buttonLabel="Click for notification"
>
<BadComponent/>
</ErrorBoundary>