Lors de la création d'applications, les erreurs sont inévitables. Ils peuvent provenir des API, de l'interface utilisateur ou de plusieurs autres endroits.
Il est très important de gérer ces erreurs avec élégance et de maintenir une bonne UX malgré ces erreurs.
Error Boundary est l'un de ces moyens de gestion des erreurs dans React.
Pour comprendre cela, comprenons la situation avant l'introduction de la limite d'erreur.
Avant les limites d'erreur, les erreurs survenant à l'intérieur des composants finissaient par se propager et cassaient l'interface utilisateur ou rendaient l'écran blanc.
Cela a provoqué une très mauvaise UX.
Error Boundary nous aide à gérer de telles erreurs et à afficher une interface utilisateur de secours au lieu de casser l'interface utilisateur ou l'écran blanc affiché.
React v16 a officiellement introduit la limite d'erreur.
Il s'agit d'un composant basé sur une classe qui peut être utilisé pour envelopper votre application.
Il accepte qu'une interface utilisateur de secours soit affichée au cas où votre application aurait des erreurs ou autrement, il restitue simplement le composant enfants pour reprendre le flux normal de votre application.
C'est ainsi que la documentation React recommande de l'utiliser,
class ErrorBoundary extends React.Component { constructor(props) { super(props); this.state = { hasError: false }; } static getDerivedStateFromError(error) { // Update state so the next render will show the fallback UI. return { hasError: true }; } componentDidCatch(error, info) { // Example "componentStack": // in ComponentThatThrows (created by App) // in ErrorBoundary (created by App) // in div (created by App) // in App logErrorToMyService(error, info.componentStack); } render() { if (this.state.hasError) { // You can render any custom fallback UI return this.props.fallback; } return this.props.children; } }
Il ne peut pas détecter les erreurs se produisant dans,
Il existe un package npm appelé react-error-boundary qui est un wrapper au-dessus du composant Error Boundary traditionnel.
Grâce à ce package, nous sommes en mesure de surmonter tous les problèmes rencontrés dans le composant traditionnel Error Boundary.
Vous pouvez envelopper l'intégralité de votre application avec ou vous pouvez envelopper des composants individuels avec .
La granularité de la mise en œuvre dépend de vous.
Comprenons comment l'utiliser.
import React from 'react'; import { ErrorBoundary } from "react-error-boundary"; const App = () => { return <ErrorBoundary fallback={<div>Something went wrong</div>}> /* rest of your component */ </ErrorBoundary> }
C'est l'exemple le plus simple d'utilisation d'ErrorBoundary. Il y a plus dans cette bibliothèque.
Essayons de comprendre l'API avec différents scénarios.
1. Je souhaite afficher une interface utilisateur de secours générique pour les erreurs dans l'application
import React from 'react'; import { ErrorBoundary } from "react-error-boundary"; const App = () => { return <ErrorBoundary fallback={<div>Something went wrong</div>}> /* rest of your component */ </ErrorBoundary> }
2. Je souhaite afficher les détails d'erreur spécifiques dans mon composant de secours
import React from 'react'; import { ErrorBoundary } from "react-error-boundary"; function fallbackRender({ error, resetErrorBoundary }) { // Call resetErrorBoundary() to reset the error boundary and retry the render. return ( <div role="alert"> <p>Something went wrong:</p> <pre style={{ color: "red" }}>{error.message}
Au lieu de fallback ou fallbackRender, vous pouvez également utiliser un composant React.
import React from 'react'; import { ErrorBoundary } from "react-error-boundary"; const Fallback = ({ error, resetErrorBoundary }) => { // Call resetErrorBoundary() to reset the error boundary and retry the render. return ( <div role="alert"> <p>Something went wrong:</p> <pre style={{ color: "red" }}>{error.message}
3. Je veux enregistrer mes erreurs
import React from 'react'; import { ErrorBoundary } from "react-error-boundary"; const logError = (error: Error, info: { componentStack: string }) => { // Do something with the error, e.g. log to an external API }; const Fallback = ({ error, resetErrorBoundary }) => { // Call resetErrorBoundary() to reset the error boundary and retry the render. return ( <div role="alert"> <p>Something went wrong:</p> <pre style={{ color: "red" }}>{error.message}
4. Je veux détecter les erreurs dans les gestionnaires d'événements et le code asynchrone
import { useErrorBoundary } from "react-error-boundary"; function Example() { const { showBoundary } = useErrorBoundary(); const getGreeting = async(name) => { try { const response = await fetchGreeting(name); // rest of your code } catch(error){ // Show error boundary showBoundary(error); } } useEffect(() => { getGreeting() }); return <Whatever UI you want to render/> }
ErrorBoundary est un composant client. Vous ne pouvez lui transmettre que des accessoires sérialisables ou les utiliser dans des fichiers dotés d'un "client d'utilisation" ; directive.
1. Qu'est-ce qu'un accessoire sérialisable ?
Un accessoire sérilzable signifie qu'il peut être converti en flux d'octets de telle manière que le flux d'octets puisse être reconverti en accessoire d'origine.
Une façon courante de le faire en Javascript est JSON.stringify() & JSON.parse().
2. Comment utiliser « utiliser le client » ; directive ?
Mentionnez-le simplement en tête du fichier
"use client";
Il existe quelques variantes supplémentaires que vous pouvez utiliser. Mais cet article est suffisant pour vous aider à démarrer.
Consultez leur documentation complète ici.
Veuillez me faire savoir dans les commentaires si vous l'avez trouvé utile.
Bon codage !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!