Al crear aplicaciones, los errores son inevitables. Pueden provenir de API, UI o de varios otros lugares.
Es muy importante manejar estos errores con elegancia y mantener una buena experiencia de usuario a pesar de estos errores.
Límite de error es una de esas formas de manejo de errores en React.
Para entender esto, comprendamos la situación antes de la introducción del límite de error.
Antes de los límites de error, los errores que ocurrían dentro de los componentes eventualmente se propagaban y rompían la interfaz de usuario o mostraban la pantalla blanca.
Esto provocó una experiencia de usuario realmente mala.
Error Boundary nos ayuda a manejar dichos errores y mostrar una interfaz de usuario alternativa en lugar de romper la interfaz de usuario o la pantalla blanca mostrada.
React v16 presentó oficialmente el límite de error.
Es un componente basado en clases que se puede utilizar para empaquetar su aplicación.
Acepta que se muestre una interfaz de usuario alternativa en caso de que su aplicación tenga errores o no, simplemente representa el componente secundario para reanudar el flujo normal de su aplicación.
Así es como la documentación de React recomienda usarlo,
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; } }
No puede detectar errores que ocurren en,
Hay un paquete npm llamado reaccionar-error-límite que es un contenedor sobre el componente tradicional Error Boundary.
Al utilizar este paquete, podemos superar todos los problemas que enfrenta el componente tradicional de límite de error.
Puedes empaquetar toda tu aplicación o puedes empaquetar componentes individuales con .
La granularidad de la implementación depende de usted.
Entendamos cómo usarlo.
import React from 'react'; import { ErrorBoundary } from "react-error-boundary"; const App = () => { returnSomething went wrong}> /* rest of your component */ }
Este es el ejemplo más simple del uso de ErrorBoundary. Hay más en esta biblioteca.
Intentemos comprender la API con diferentes escenarios.
1. Quiero mostrar una interfaz de usuario alternativa genérica para errores en la aplicación
import React from 'react'; import { ErrorBoundary } from "react-error-boundary"; const App = () => { returnSomething went wrong}> /* rest of your component */ }
2. Quiero mostrar detalles de error específicos en mi componente alternativo
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 (); } aplicación constante = () => { retorno); } const App = () => { returnSomething went wrong:
{error.message}{ // Reset the state of your app so the error doesn't happen again }} > /* rest of your component */ }
En lugar de fallback o fallbackRender, también puedes usar un componente 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 (); } aplicación constante = () => { retorno); } 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. Quiero registrar mis errores
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 (); } // Puedes usar fallback / fallbackRender / FallbackComponent cualquier cosa aplicación constante = () => { retorno); } // 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. Quiero detectar errores en los controladores de eventos y el código asíncrono
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 es un componente del cliente. Sólo puede pasarle accesorios que sean serializables o usarlos en archivos que tengan un "usar cliente"; directiva.
1. ¿Qué es un accesorio serializable?
La propiedad serializable significa que se puede convertir en un flujo de bytes de tal manera que el flujo de bytes se pueda volver a convertir en una propiedad original.
Una forma común de hacerlo en Javascript es JSON.stringify() & JSON.parse().
2. Cómo utilizar "usar cliente"; ¿directiva?
Simplemente menciónelo en la parte superior del archivo
"use client";
Hay algunas variaciones más que puedes usar. Pero este artículo es lo suficientemente bueno como para empezar.
Consulta su documentación completa aquí.
Por favor, déjame saber en los comentarios si te resultó útil.
¡Feliz codificación!
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3