Durante a construção de aplicativos, erros são inevitáveis. Eles podem vir de APIs, UI ou de vários outros lugares.
É muito importante lidar com esses erros com elegância e manter uma boa experiência do usuário, apesar desses erros.
Error Boundary é uma forma de tratamento de erros no React.
Para entender isso, vamos entender a situação antes da introdução do limite de erro.
Antes dos limites de erro, os erros que ocorriam dentro dos componentes eventualmente se propagavam e quebravam a IU ou renderizavam a tela branca.
Isso causou uma experiência de usuário muito ruim.
O limite de erro nos ajuda a lidar com esses erros e exibir uma IU substituta em vez de quebrar a IU ou a tela branca exibida.
React v16 introduziu oficialmente o limite de erro.
É um componente baseado em classe que pode ser usado para encapsular seu aplicativo.
Ele aceita uma UI substituta para ser exibida caso seu aplicativo tenha erros ou não, ele simplesmente renderiza o componente filho para retomar o fluxo normal de seu aplicativo.
É assim que a documentação do React recomenda usá-lo,
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; } }
Ele não pode capturar erros que ocorrem em,
Há um pacote npm chamado react-error-boundary que é um wrapper sobre o componente Error Boundary tradicional.
Usando este pacote, somos capazes de superar todos os problemas enfrentados no componente tradicional de limite de erro.
Você pode agrupar todo o seu aplicativo ou agrupar componentes individuais com .
A granularidade da implementação depende de você.
Vamos entender como usá-lo.
import React from 'react'; import { ErrorBoundary } from "react-error-boundary"; const App = () => { returnSomething went wrong}> /* rest of your component */ }
Este é o exemplo mais simples de uso de ErrorBoundary. Há mais nesta biblioteca.
Vamos tentar entender a API em diferentes cenários.
1. Quero mostrar uma UI substituta genérica para erros no aplicativo
import React from 'react'; import { ErrorBoundary } from "react-error-boundary"; const App = () => { returnSomething went wrong}> /* rest of your component */ }
2. Quero mostrar detalhes de erros específicos em meu componente substituto
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 (); } aplicativo const = () => { retornar); } const App = () => { returnSomething went wrong:
{error.message}{ // Reset the state of your app so the error doesn't happen again }} > /* rest of your component */ }
Em vez de fallback ou fallbackRender, você também pode usar um 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 (); } aplicativo const = () => { retornar); } 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. Quero registrar meus erros
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 (); } // Você pode usar fallback / fallbackRender / FallbackComponent qualquer coisa aplicativo const = () => { retornar); } // 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. Quero detectar erros em manipuladores de eventos e código assí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 é um componente cliente. Você só pode passar adereços serializáveis ou usá-lo em arquivos que possuem um "cliente de uso"; diretiva.
1. O que é um suporte serializável?
Prop Serilzable significa que ele pode ser convertido em fluxo de bytes de tal forma que o fluxo de bytes possa ser convertido de volta em prop original.
Uma maneira comum de fazer isso em Javascript é JSON.stringify() & JSON.parse().
2. Como usar "usar cliente"; diretiva?
Basta mencioná-lo no topo do arquivo
"use client";
Existem mais algumas variações que você pode usar. Mas este artigo é bom o suficiente para você começar.
Confira a documentação completa aqui.
Por favor, deixe-me saber nos comentários se você achou isso útil.
Boa codificação!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3