response-hot-loader + границы ошибок: как очистить ошибку после горячего обновления? - PullRequest
0 голосов
/ 02 октября 2018

Вот моя граница ошибки:

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;
    }
}

Когда мое приложение падает, оно выглядит так:

enter image description here

Проблемакогда я исправляю эту ошибку, сообщение никогда не исчезает.

Довольно легко понять почему: я скопировал ошибку в состояние.Состояние никогда не очищается во время горячей перезагрузки.

Мой вопрос: как можно ли очистить состояние ошибки при горячей перезагрузке?

В идеале, это 'Я очищаю состояние только при перезагрузке потомка / потомка, но это может быть слишком сложно определить, поэтому я согласился бы на его очистку всякий раз, когда любой компонент перезагружается.Вероятно, он просто перехватит снова, если ошибка не была исправлена.


Горячая перезагрузка настроена с использованием рекомендуемого подхода:

const App = () => (
    <ErrorBoundary>
        <BrowserRouter>
            <ScrollTop>
                <Container>
                    /* blah blah */

                    <TabContent>
                        <ErrorBoundary>
                            /* blah */
                        </ErrorBoundary>
                    </TabContent>
                </Container>
            </ScrollTop>
        </BrowserRouter>
    </ErrorBoundary>

)

export default hot(module)(App)

1 Ответ

0 голосов
/ 02 октября 2018

Это не дает прямого ответа на вопрос, но я нашел небольшую хитрость, которая хорошо работает с реагирующим маршрутизатором.Если вы переместите границу ошибки внутри маршрута, состояние естественно очистится при переходе на новую страницу!

<Switch>
    {routes.map(({path, component: Page}, idx) => (
        <Route key={idx} exact path={path}>
            {(routeProps: RouteComponentProps) => <ErrorBoundary><Page/></ErrorBoundary>}
        </Route>
    ))}
</Switch>

Таким образом, каждая страница может иметь свое собственное состояние ошибки.Перемещение назад и вперед очистит состояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...