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 casser l'interface utilisateur ou rendre l'écran blanc.
Cela a provoqué une très mauvaise UX.
Error Boundary nous aide à gérer ces 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 enfant pour reprendre le flux normal de votre application.
Voici comment 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 = () => { returnSomething went wrong}> /* rest of your component */ }
Il s'agit de l'exemple le plus simple d'utilisation de ErrorBoundary. Il y a bien 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 = () => { returnSomething went wrong}> /* rest of your component */ }
2. Je souhaite afficher des 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 (); } const App = () => { retourner); } const App = () => { returnSomething went wrong:
{error.message}{ // Reset the state of your app so the error doesn't happen again }} > /* rest of your component */ }
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 (); } const App = () => { retourner); } const App = () => { returnSomething went wrong:
{error.message}{ // Reset the state of your app so the error doesn't happen again }} > /* rest of your component */ }
3. Je souhaite 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 (); } // Vous pouvez utiliser fallback / fallbackRender / FallbackComponent n'importe quoi const App = () => { retourner); } // You can use fallback / fallbackRender / FallbackComponent anything const App = () => { returnSomething went wrong:
{error.message}{ // Reset the state of your app so the error doesn't happen again }} > /* rest of your component */ }
4. Je souhaite 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}
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" ; directif.
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 » ; directif?
Mentionnez-le simplement en haut 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 !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3