Catching errors in React (16 and up)
If an error is thrown while rendering React, React unmounts the entire tree.
In production, this might not be behaviour you want. The behaviour might be inconsequential to the user's current path and why stop the user cold due to an unanticipated state?
React provides a function componentDidCatch
to help manage exceptions and keep the consequence of the error localized to a specific part of your component tree.
This blog post describes the concept of an ErrorBoundary
which can look like this:
class ErrorBoundary extends Component {
componentDidCatch(error, {componentStack}) {
console.log("error", error)
console.log("componentStack", componentStack)
}
render() {
return this.props.children;
}
}
Using the componentDidCatch
lifecycle function this component will catch any error thrown by its children. If an error is thrown it will not render and none of it's children will render, but all components in different sections of the component tree will render.
The second argumunent to componentDidCatch
is an object containing a key called componentStack
which is a nice stack provided by React.
H/T Josh Branchaud
Tweet