javascript - React 在使用 ErrorBoundary 捕获后仍然显示错误

标签 javascript reactjs create-react-app

我的 React 应用程序正在捕获错误并正确显示我的自定义错误消息,但一秒钟后它仍然显示原始错误日志记录。因此,后备 UI 随后会被初始错误屏幕所取代。

测试组件:

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

在错误组件test中是未定义的,这样会抛出一个未定义的错误。

错误边界:

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 可以防止所有崩溃并在该组件中显示自定义消息并使其他组件保持事件状态(完好无损),对吗?

最佳答案

我想我明白了。 create-react-app 包有一个名为 react-overlay-error 的工具.这会将来自控制台的错误消息显示为您的应用程序的叠加层,以便您可以轻松检查堆栈跟踪和调试。

这不会出现在生产模式中,它只是一个复制普通浏览器控制台的开发工具。

您可以通过按 Escape 再次查看叠加层来隐藏它。

如果你想摆脱它,this answer可能有帮助。

关于javascript - React 在使用 ErrorBoundary 捕获后仍然显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52096804/

相关文章:

javascript - 如何在javascript中解析日期中的 "30-06-2017 07:55 pm"

javascript - 使用 axios 表达 promisify

reactjs - 创建 react 应用程序,重新加载不起作用

typescript - 未找到规则 '@typescript-eslint/no-redeclare' 的定义

javascript - 更改列表框所选项目时更改图像

javascript - 用于日期和名称规则的 JS RegEx

javascript - 如何设置js-GRID默认插入,而不是过滤

javascript - this.props 在点击事件中未定义

javascript - React : controlled vs uncontrolled component 中基于数组的复选框

reactjs - 无法使用 create-react-app 导入图像