Capítulo 360 de 456
Como tratar erros em três camadas no Pages Router: overlay de desenvolvimento, erros de servidor (página 500) e erros de cliente (React Error Boundaries).
next dev; some quando o erro é corrigido; não aparece em produção.pages/500.js customiza a página estática padrão para erros de servidor; não expõe o erro real ao usuário.getDerivedStateFromError e componentDidCatch, envolvendo Component em pages/_app.js.class ErrorBoundary extends React.Component {
constructor(props) {
super(props)
this.state = { hasError: false }
}
static getDerivedStateFromError(error) {
return { hasError: true }
}
componentDidCatch(error, errorInfo) {
console.log({ error, errorInfo })
}
render() {
if (this.state.hasError) {
return (
<div>
<h2>Oops, there is an error!</h2>
<button type="button" onClick={() => this.setState({ hasError: false })}>
Try again?
</button>
</div>
)
}
return this.props.children
}
}
export default ErrorBoundary
hasError, fallback UI e reset manual.// pages/_app.js
import ErrorBoundary from '../components/ErrorBoundary'
function MyApp({ Component, pageProps }) {
return (
<ErrorBoundary>
<Component {...pageProps} />
</ErrorBoundary>
)
}
export default MyApp
Component em _app.js para capturar erros de qualquer página.pages/500.js e pages/404.js são os pontos de customização server-side.pages/500.js.pages/_app.js): local onde o ErrorBoundary é montado globalmente.