Reputation: 73
Background: React Version: 16.13.1 Browser: Chrome Version - 81.0.4044.122
Although ErrorBoundary is used in the below code snippet, it throws an error in the browser. The handled error displays for few milliseconds, then the actual error is displayed in the browser. Could someone please help me out with this.
Below is the entire code snippet:
class CustomErrorBoundary extends Component {
constructor(props) {
super(props);
this.state = { error: null, errorInfo: null };
}
componentDidCatch(error, errorInfo) {
// Catch errors in any components below and re-render with error message
this.setState({
error: error,
errorInfo: errorInfo
})
// You can also log error messages to an error reporting service here
}
render() {
if (this.state.errorInfo) {
// Error path
return (
<div>
<h2>Something went wrong.</h2>
</div>
);
}
// Normally, just render children
return this.props.children;
}
}
class BuggyComponent extends Component {
constructor(props) {
super(props);
this.state = { Clicked: "false" };
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState({
Clicked: "true"
});
}
render() {
if (this.state.Clicked === "true") {
// Simulate a JS error
throw new Error('I crashed!');
}
return <button onClick={this.handleClick}>{this.props.Label}</button>;
}
}
function App() {
return (
<div>
<CustomErrorBoundary>
<BuggyComponent Label="I catch exceptions"/>
</CustomErrorBoundary>
</div>
);
}
export default App;
Upvotes: 1
Views: 950
Reputation: 202854
This is the default behavior in non-production builds.
https://reactjs.org/docs/error-boundaries.html#component-stack-traces
Upvotes: 2