Capítulo 155 de 456
catchError cria programaticamente um componente que envolve seus filhos em um error boundary, como alternativa à convenção de arquivo error.js, permitindo recuperação de erro em qualquer ponto da árvore de componentes (não só no nível de route segment).
catchError(fallback): importado de next/error; retorna um componente React que envolve children em um error boundary.redirect()/notFound() (que lançam erros especiais internamente) e não os captura por engano.retry(): re-renderiza os filhos do error boundary dentro de uma Transition, preservando estado de Client Components fora do boundary; recomendado para a maioria dos casos.reset(): apenas limpa o estado de erro e re-renderiza sem re-buscar dados; não recupera de erros em Server Component.catchError só pode ser chamado em Client Components ('use client').'use client'
import { catchError, type ErrorInfo } from 'next/error'
function ErrorFallback(props: { title: string }, { error, retry }: ErrorInfo) {
return (
<div>
<h2>{props.title}</h2>
<p>{error.message}</p>
<button onClick={() => retry()}>Try again</button>
</div>
)
}
export default catchError(ErrorFallback)
props customizadas e retry.import ErrorWrapper from '../custom-error-boundary'
export default function Component({ children }: { children: React.ReactNode }) {
return <ErrorWrapper title="Dashboard Error">{children}</ErrorWrapper>
}
catchError para envolver parte específica da UI.| Property (ErrorInfo) | Type | Description |
|---|---|---|
error | Error | instância do erro capturado |
retry | () => void | re-busca e re-renderiza os children; substitui fallback se bem-sucedido |
reset | () => void | limpa estado de erro e re-renderiza sem re-buscar |
reset() em vez de retry() por padrão: reset() não recupera erros vindos de Server Components, só limpa o estado local.error.js com catchError: desnecessário, error.js já renderiza dentro de um boundary embutido do Next.js.catchError é a via programática para error boundaries granulares, enquanto error.js é escopado a segmentos de rota.ReactNode, mas isso renderiza eagerly em todo render, mesmo sem erro (use com moderação).catchError é a via para casos fora desse escopo.catchError.