Utilisation
Présentation
Le composant de limite d'erreur est un composant wrapper qui accepte les composants enfants et quelques personnalisations en option. Lorsque le rendu d'un composant enfant est normal, le composant de limite d'erreur ne réagit pas. Toutefois, si un composant enfant génère une erreur lors du rendu, le composant de limite d'erreur intervient et remplace ce composant par une interface utilisateur d'erreur prédéfinie.

Le composant de limite d'erreur intercepte les erreurs JavaScript générées par les composants React et les signale aux événements Jutro par défaut, mais ce comportement peut être modifié si nécessaire. Il présente également une action de récupération et empêche l’application entière de planter.
L'interface utilisateur d'erreur se compose d'une icône, d'un texte d'erreur et d'un texte d'erreur détaillé, ainsi que d'un bouton d'action. Vous pouvez personnaliser tous ces éléments et utiliser le composant n'importe où dans votre application. Par défaut, il est utilisé autour du modèle d'application Jutro et englobe également tous les modules micro front-end. L'ensemble des paramètres du composant de limite d'erreur et des exemples des différents styles, tels que fiche ou pleine hauteur, est disponible dans Storybook.
Intégrer un composant avec une limite d'erreur
Vous pouvez intégrer le composant de votre choix dans un composant de limite d'erreur. Toutefois, nous vous recommandons de l'utiliser principalement pour les composants qui reposent sur des appels réseau ou qui interagissent avec des API ou des bases de données, car ils sont plus susceptibles d'échouer. Vous pouvez intégrer un composant dans un composant de limite d'erreur de la façon suivante :
const MyComponentWithBoundary = (props) => (
<ErrorBoundary noticeStyle="card">
<MyComponent {...props} />
</ErrorBoundary>
);
Personnalisation
Vous pouvez personnaliser toutes les parties du composant de limite d'erreur à l'aide de métadonnées ou de JSX. Vous pouvez également choisir d'afficher ou non l'erreur technique générée par un composant enfant.
Par exemple, vous pouvez configurer les métadonnées de façon à ce que l'erreur technique représentée par la propriété showErrorMessage apparaisse de la façon suivante :
{
"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
}
}
Vous pouvez faire la même chose dans JSX en intégrant une propriété supplémentaire, showErrorMessage, de la façon suivante :
const BasicTemplate: ErrorBoundaryStory = (args) => (
<ErrorBoundary
showErrorMessage
{...args}>
<BadComponent />
</ErrorBoundary>
);
De même, vous pouvez intégrer et personnaliser d'autres propriétés comme noticeStyle, mainMessage, detailedMessage et actions avec leurs fonctions de rappel respectives.
Vous pouvez également remplacer le composant d'interface utilisateur d'erreur par défaut par un composant personnalisé. Consultez Storybook pour obtenir plus d'exemples de personnalisation.
Code
<ErrorBoundary>
<BadComponent />
</ErrorBoundary>
Instruction d'importation
import { ErrorBoundary } from '@jutro/components';
Cahier des charges du composant
Assurez-vous de comprendre la surface de l'API des composants du système de conception, ainsi que les implications et les compromis. Pour en savoir plus, reportez-vous à notre introduction à l'API des composants.
Propriétés
Note: Vous pouvez également inclure des propriétés de passage pour votre composant de secours dans une limite d’erreur. Si vous utilisez le composant de secours par défaut, reportez-vous à la table des propriétés du composant d'avis d’erreur pour obtenir la liste des propriétés supplémentaires. childrenobligatoire
DescriptionChildren to be wrapped by the error boundary.
fallbackComponent
DescriptionAn optional custom component to render when an error occurs.
Valeur par défaut[ErrorNotice](#error-notice-properties)
onError
DescriptionAn optional action to be triggered when errors occur.
Valeur par défautjutroEventsReporter
Propriétés de l’avis d’erreur
Ces propriétés supplémentaires seront disponibles si la valeur par défaut du composant de secours est utilisée.
actions
Type{label: IntlMessageShape, callback: func}[]
DescriptionAn array of label-callback objects to be displayed as recovery action buttons. See IntlMessageShape for details on the type for the label property.
Valeur par défaut{label: 'Reload Page', callback: () => window.location.reload()}[]
detailedMessage
DescriptionA more detailed message to be displayed below the main message on the error UI.
Valeur par défaut'We were not able to recover from the situation automatically. Please reload the page.'
error
DescriptionThe error object with technical information.
icon
DescriptionAn 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'.
Valeur par défautErrorOutlineIcon
mainMessage
DescriptionThe main message to be displayed to the user on the error UI.
Valeur par défaut'Something went wrong with a component'
noticeStyle
Type'card' | 'plain' | 'fullHeight'
DescriptionThe notice container visual style.
showErrorMessage
DescriptionIf set to true, the error message from the Error object will be shown.
Crochets
Aucun crochet n'est disponible pour error boundary.
Clés de traduction
Les clés de traduction suivantes sont définies pour le composant d’avis d’erreur utilisé comme valeur par défaut pour le composant de secours :
Il n'existe aucune traduction pour error boundary.
Pour en savoir plus sur la gestion des traductions, reportez-vous à notre section sur l'internationalisation.
Portes de sortie
Pour en savoir plus, reportez-vous à notre documentation sur les portes de sortie.
Exemples
Consultez la section Utilisation pour découvrir comment concevoir correctement une limite d'erreur et connaître les différentes options de configuration que nous proposons.
Exemple de limite d’erreur de base
Les limites d’erreur sont des wrappers qui afficheront un composant de secours si l’un de ses enfants rencontre une erreur.
<ErrorBoundary>
<BadComponent />
</ErrorBoundary>
Exemple de personnalisation
Vous pouvez transmettre des propriétés au composant de limite d’erreur qui seront transmises à son composant de secours.
<ErrorBoundary
noticeStyle="card"
showErrorMessage>
<BadComponent />
</ErrorBoundary>
Exemple de composant de secours personnalisé simple
Vous pouvez définir votre propre composant de secours à afficher lorsqu’une erreur se produit.
function AlternateFallback () {
return (
<strong>An error occurred.</strong>
)
}
...
<ErrorBoundary fallbackComponent={AlternateFallback}>
<BadComponent/>
</ErrorBoundary>
Exemple d’utilisation d'un composant de secours personnalisé avec message d’erreur
Un objet sera transmis au composant de secours qui contient l’objet JavaScript error en tant que propriété.
function AlternateFallback({error}) {
return (
<span><strong>An error occurred:</strong> {error.message}</span>
)
}
...
<ErrorBoundary fallbackComponent={AlternateFallback}>
<BadComponent/>
</ErrorBoundary>
Exemple d’utilisation d’un composant de secours personnalisé avec des propriétés
Les propriétés supplémentaires transmises au composant de limite d’erreur seront ajoutées en tant que propriétés pour le composant transmis à 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>