We can use React error boundaries to handle errors gracefully in a React app.
In this article, we’ll look at how to use React error boundaries to handle errors gracefully in a React app.
Use React Error Boundaries to Handle Errors Gracefully
Error boundaries are components that are displayed when there’re errors. They have special hooks like componentDidCatch to let us retrieve error details and does actions on error accordingly.
We wrap error boundary components around components that may throw errors for them to work.
Error boundary components are always class-based components. There’s no function component equivalent for this.
For instance, we can define an error boundary component and use it as follows:
import React from "react";
`
function Foo() {
throw new Error("error");
return <div>foo</div>;
}
`
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
componentDidCatch(error, info) {
this.setState({ hasError: true });
}
render() {
if (this.state.hasError) {
return <h1>Error occurred.</h1>;
}
return this.props.children;
}
}
`
export default function App() {
return (
<ErrorBoundary>
<Foo />
</ErrorBoundary>
);
}
In the code above, we defined the ErrorBoundary component, which has the componentDidCatch hook, which takes the error parameter with the error that’s raised, and info object with the error information.
Then we call setState to hasError to true so that we render an error message. We return this.props.children when there’re no errors so that we display the components that we put inside the ErrorBoundary component.
Therefore, when we have Foo , where we threw an error, then we display the ‘Error occurred’ message since Foo throws an error before rendering anything.
Conclusion
Error boundaries are components that are displayed when there’re errors. They have special hooks like componentDidCatch to let us retrieve error details and does actions on error accordingly.
We wrap error boundary components around components that may throw errors for them to work.
Error boundary components are always class-based components. There’s no function component equivalent for this.