Error Boundaries — это механизм в React, который позволяет перехватывать и обрабатывать ошибки JavaScript в дочерних компонентах, чтобы предотвратить "распад" (crash) всего приложения. Они работают как try-catch
, но на уровне компонентов.
Error Boundaries — это обычные React-компоненты, которые:
Для создания Error Boundary нужно:
static getDerivedStateFromError()
componentDidCatch()
Пример:
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// Обновляем состояние для отображения fallback UI
return { hasError: true };
}
componentDidCatch(error, errorInfo) {
// Можно отправить ошибку в сервис мониторинга (Sentry, etc.)
logErrorToService(error, errorInfo);
}
render() {
if (this.state.hasError) {
return <h1>Что-то пошло не так.</h1>;
}
return this.props.children;
}
}
Оберните компоненты, которые могут вызывать ошибки, в Error Boundary:
<ErrorBoundary>
<MyComponent />
</ErrorBoundary>
class ErrorBoundaryWithRetry extends React.Component {
state = { hasError: false, error: null };
static getDerivedStateFromError(error) {
return { hasError: true, error };
}
handleRetry = () => {
this.setState({ hasError: false, error: null });
};
render() {
if (this.state.hasError) {
return (
<div>
<h2>Ошибка: {this.state.error.message}</h2>
<button onClick={this.handleRetry}>Попробовать снова</button>
</div>
);
}
return this.props.children;
}
}
useErrorBoundary
в будущем).Error Boundaries — это мощный инструмент для обработки ошибок в React-приложениях, который помогает:
Используйте их стратегически в ключевых местах вашего приложения для улучшения пользовательского опыта и отказоустойчивости.