I've got the following working JavaScript class.I'm hoping there is an ES6 way of doing it without having to use the constructor keyword and also minimize the use of this. I've tried statements like
state = {hasError: false}
and that works for just hasError, but can't figure out how to handle the function bind. I'm hoping not to have to do that like I don't have to use this to access state with the new syntax.
export default class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
this.updateHasErrorsToFalse = this.updateHasErrorsToFalse.bind(this);
}
updateHasErrorsToFalse() {
this.setState((prevState) => ({
hasError: false,
}));
}
//state = { hasError: false, error: null, };
static getDerivedStateFromError(error) {
return {
hasError: true,
error: error.message
};
}
componentDidCatch(error, errorInfo) {
// You can also log the error to an error reporting service
console.log(error, errorInfo);
}
updateHasErrorsToFalse() {
this.setState((prevState) => ({
hasError: false,
}));
}
render() {
function addExtraProps(Component, extraProps) {
return <Component.type {...Component.props} {...extraProps} />;
}
if (this.state.hasError) {
return addExtraProps(this.props.fallback, {
error: this.state.error,
resetError: this.updateHasErrorsToFalse,
});
}
return this.props.children;
}
}