Вот моя граница ошибки:
export default class ErrorBoundary extends React.Component<Props> {
state: State = {error: null, errorInfo: null};
componentDidCatch(error: Error, errorInfo: ErrorInfo) {
this.setState({
error: error,
errorInfo: errorInfo
})
}
render() {
if (this.state.errorInfo) {
return (
<ErrorContainer>
<Title>Runtime Error</Title>
<ErrorMessage>{String(this.state.error)}</ErrorMessage>
</ErrorContainer>
);
}
return this.props.children;
}
}
Когда мое приложение падает, оно выглядит так:
Проблемакогда я исправляю эту ошибку, сообщение никогда не исчезает.
Довольно легко понять почему: я скопировал ошибку в состояние.Состояние никогда не очищается во время горячей перезагрузки.
Мой вопрос: как можно ли очистить состояние ошибки при горячей перезагрузке?
В идеале, это 'Я очищаю состояние только при перезагрузке потомка / потомка, но это может быть слишком сложно определить, поэтому я согласился бы на его очистку всякий раз, когда любой компонент перезагружается.Вероятно, он просто перехватит снова, если ошибка не была исправлена.
Горячая перезагрузка настроена с использованием рекомендуемого подхода:
const App = () => (
<ErrorBoundary>
<BrowserRouter>
<ScrollTop>
<Container>
/* blah blah */
<TabContent>
<ErrorBoundary>
/* blah */
</ErrorBoundary>
</TabContent>
</Container>
</ScrollTop>
</BrowserRouter>
</ErrorBoundary>
)
export default hot(module)(App)