21 lines
1010 B
TypeScript
21 lines
1010 B
TypeScript
import { Component, type ErrorInfo, type ReactNode } from "react";
|
||
|
||
interface State { error: Error | null }
|
||
|
||
// неожиданная ошибка отрисовки страницы: сообщение и перезагрузка вместо пустого экрана; панель разделов остаётся
|
||
export class ErrorBoundary extends Component<{ children: ReactNode }, State> {
|
||
state: State = { error: null };
|
||
static getDerivedStateFromError(error: Error): State { return { error }; }
|
||
componentDidCatch(error: Error, info: ErrorInfo) { console.error("ошибка страницы", error, info.componentStack); }
|
||
render() {
|
||
if (!this.state.error) return this.props.children;
|
||
return (
|
||
<div className="crash" role="alert">
|
||
<h2>Страница сломалась</h2>
|
||
<p>{this.state.error.message}</p>
|
||
<button className="btn" type="button" onClick={() => window.location.reload()}>Перезагрузить</button>
|
||
</div>
|
||
);
|
||
}
|
||
}
|