当前位置: 首页 > 面试题库 >

创建React应用程序不显示带有ErrorBoundary的错误消息

孔阳平
2023-03-14
问题内容

我正在学习如何使用componentDidCatch()。它看起来直截了当。它可以工作,但是仍然可以在视图上显示完整的错误堆栈。

在单独的文件中:

import React, { Component } from 'react'

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = {
      hasError: false
    }
  }

  componentDidCatch(error, info) {
    console.log("Catching an error") // this is never logged
    this.setState(state => ({...state, hasError: true }))
  }

  render() {
    if (this.state.hasError) { return <div>Sorry, an error occurred</div> }

    return this.props.children
  }
}
export default ErrorBoundary

      ...

import React, { Component } from 'react'

class Foo extends Component {

  render() {
    return this.props.a.b; // So this should cause the error
  }
}
export default Foo

      ...

import React, { Component } from 'react'
// Imported Foo and ErrorBoundary

class Home extends Component {

  render() {
    return <ErrorBoundary><Foo /></ErrorBoundary>
  }
}
export default Home

在页面刷新时,Sorry, an error occurred从字面上看,我需要等待一秒钟,然后向用户显示完整的错误堆栈。这是Create React
App的问题吗?我正在使用React 16。


问题答案:

根据github上的 这个 问题,

在页面刷新上,我看到很抱歉,从字面上看,发生了一秒钟的错误,然后向用户显示了完整的错误堆栈。

@DanAbramov明确指出

这是故意的。意外错误仍然是错误。(我们不建议对预期的错误或控制流使用错误边界。)

错误边界主要对生产有用,但是在开发中,我们希望使错误尽可能地可见。

另外可见的错误只是一个覆盖,您的ErrorBoundary消息被隐藏在错误覆盖的后面

要检查错误是否确实存在,您可以检查元素并从DOM中删除覆盖,您将能够看到错误消息

检查此CodeSandbox:



 类似资料:
  • 我正在尝试创建一个新的react应用程序: 安装似乎工作正常,但当我尝试的应用程序,我得到一个错误: C:\。。。\我的应用程序\node\u modules\react scripts\scripts\utils\verifyTypeScriptSetup。js:239 appTsConfig。编译器选项[选项]=值^ TypeError:无法在对象的verifyTypeScriptSetup(

  • 我是新开发人员。创建生成android APK时发现错误。 已经设置到环境变量,但什么都没发生...请帮帮我。给我这个的解决方案。 D:\Ionic\testPushNotification

  • 我正在开发一个API(使用nodejs的AWS lambda函数)。在这里,我检查通过HTTP POST发送到API的文件是否小于2 MB。如果他们比这还多,那么我提出了一个错误。 现在,邮递员正确地显示了此错误消息。但当我尝试使用react前端产生相同的情况时。我收到了这个消息 我不知道为什么CORS出错,因为如果我的文件小于2 MB,它就可以工作。react组件中的我的代码 为什么前端无法控制

  • 我在使用“创建反应应用程序”时遇到编译失败。我得到的信息如下。 __ ./src/App。未找到js模块:您试图导入/联系项目src/目录之外的内容。不支持src/之外的相对导入。您可以将其移动到src/内部,也可以从项目的节点_modules/向其添加符号链接。 __ 奇怪的是,我的src文件夹中肯定有“/联系人”文件,而消息说我没有。这是我的文件夹树。 这是我的应用程序。js代码。 感觉我在这

  • 我正在尝试使用rails创建新项目,但它显示错误。我正在处理mac及其显示错误 $rails新特快专递

  • 我没有做任何更改,我只是运行“CreateReact应用程序客户端”,然后一切正常运行,我将cd放入目录并运行“ThreadStart”。然后我有两个问题:1)它说“有些东西已经在3000端口上运行了”。不幸的是,当我使用lsof和netstat时,端口3000上没有运行任何东西。我说在不同的端口上运行,然后它会尝试为应用程序提供服务。2) 新港口没有提供任何服务。浏览器将打开,控制台不会给出任何