Подтвердить что ты не робот

Реакция все еще показывает ошибки после ловли с помощью ErrorBoundary

Мое приложение React улавливает ошибку и корректно отображает мое пользовательское сообщение об ошибке, но через секунду оно все равно отображает исходное сообщение об ошибке. Таким образом, резервный пользовательский интерфейс будет заменен начальным экраном ошибок.

Тестовый компонент:

import React, { Component } from 'react';

export class Test extends React.Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
        <ErrorBoundary>

        <Error></Error>

        </ErrorBoundary>);
    }
}

Ошибка компонента:

import React, { Component } from 'react';

export class Error extends React.Component {
    constructor(props) {
        super(props);
    }

    render() {
        return ({ test });
    }
}

В тесте ошибки компонент не определен, поэтому выдается неопределенная ошибка.

ErrorBoundary:

import React, { Component } from 'react';

export class ErrorBoundary extends React.Component {
    constructor(props) {
        super(props);
        this.state = { error: null, errorInfo: null };
        console.log('initiated');
    }

    componentDidCatch(error, errorInfo) {
        // Catch errors in any components below and re-render with error message
        console.log('ERROR');
        this.setState({
            error: error,
            errorInfo: errorInfo
        })
        // You can also log error messages to an error reporting service here
    }

    render() {
        console.log('STATE');
        console.log(this.state.error);
        if (this.state.errorInfo) {
            // Error path
            return (
                <div>
                    <h2>Something went wrong.</h2>
                    <details style={{ whiteSpace: 'pre-wrap' }}>
                        {this.state.error && this.state.error.toString()}
                        <br />
                        {this.state.errorInfo.componentStack}
                    </details>
                </div>
            );
        }
        // Normally, just render children
        return this.props.children;
    }
}

Сначала отобразится это:

custom error

Затем через секунду это отобразится:

initial error

Как я могу решить это?

Если компонент дает сбой, ErrorBoundaries может предотвратить сбой всего и отображать пользовательское сообщение в этом компоненте, а другие компоненты остаются активными (в такте), верно?

4b9b3361

Ответ 1

Я думаю, что понял. В пакете create-react-app есть инструмент под названием response-overlay-error. Это показывает сообщения об ошибках от консоли как наложение на ваше приложение, так что вы можете легко проверить трассировку стека и отладку.

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

Вы можете скрыть это, нажав Escape, чтобы снова увидеть наложение.

Если вы хотите избавиться от этого, этот ответ может помочь.