Реагируйте, все еще показывая ошибки после отлова с ErrorBoundary - PullRequest
0 голосов
/ 30 августа 2018

Мое приложение 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 может предотвратить сбой всего, отображать пользовательское сообщение в этом компоненте и поддерживать другие компоненты в рабочем состоянии (в такте), верно?

1 Ответ

0 голосов
/ 30 августа 2018

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

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

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

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

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