Когда срабатывает componentDidMount
, вы можете делать DOM-манипуляции, поэтому имеет смысл, что родитель получает его только после монтирования потомков.Тем не менее, вы можете использовать componentWillMount
, который срабатывает в противоположном направлении, в первую очередь родители.
Если это ясно, то так вы перехватываете ошибки в React 16.x:
React 16.x Пример обработки ошибок
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
componentDidCatch(error, info) {
// Display fallback UI
this.setState({ hasError: true });
// You can also log the error to an error reporting service
logErrorToMyService(error, info);
}
render() {
if (this.state.hasError) {
// You can render any custom fallback UI
return <h1>Something went wrong.</h1>;
}
return this.props.children;
}
}
<ErrorBoundary>
<MyWidget />
</ErrorBoundary>
Ссылка: https://reactjs.org/blog/2017/07/26/error-handling-in-react-16.html
REACT 15 Пример обработки ошибок
unstable_handleError()
- функция длявсе компоненты, которые вызываются, когда рендер или дочерние элементы выдают ошибку.
unstable_handleError: function(){
this.setState({error: "oops"})
}
class Boundary extends React.Component {
...
unstable_handleError() {
logErrorSoYouCanFixTheThing()
this.setState({error: true});
}
render() {
if (this.state.error){
return <SafeComponent/>
} else {
return <ComponentWithErrors/>
}
}
}
При монтировании ошибки нет, поэтому он рендерит <ComponentWithErrors/>
.
Если <ComponentWithErrors/>
выдает ошибку, unstable_handleError()
этого компонента будети состояние обновится до error: true
.
При обновлении состояния вместо этого будет отображаться <SafeComponent/>
!