try-catch - 你能用 try/catch block 捕获 React.js 应用程序的所有错误吗?

标签 try-catch reactjs

我制作了一个未实时运行的 react 应用程序,使用它的人注意到偶尔会发生一些奇怪的错误。我不知道为什么或发生了什么,也无法重现它。

所以我想知道是否有一种方法可以将整个应用程序或其一部分包装在 try/catch block 中,以便我可以将错误发送到服务器上的错误日志?

到目前为止,我读到的只是您可以将整个渲染函数包装在 try/catch 中,但这不会捕获由于用户交互而导致的任何错误,对吗?

最佳答案

编辑

下面的解决方案仅捕获渲染错误,因为它们本质上是同步的。这就是 JS 的工作原理,它与 React 无关,这是 OP 询问的内容。

原帖

引入 React 16 Error BoundariescomponentDidCatch lifecycle method :

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

  componentDidCatch(error, info) {
    // Display fallback UI
    this.setState({ hasError: true });
    // You can also log the error to an error reporting service
    logErrorToMyService(error, info);
  }

  render() {
    if (this.state.hasError) {
      // You can render any custom fallback UI
      return <h1>Something went wrong.</h1>;
    }
    return this.props.children;
  }
}

然后你可以将它用作常规组件:

<ErrorBoundary>
  <MyWidget />
</ErrorBoundary>

或者您可以使用 npm 包 react-error-boundary 包装您的根组件,并设置后备组件和行为。

import {ErrorBoundary} from 'react-error-boundary';

const myErrorHandler = (error: Error, componentStack: string) => {
  // ...
};

<ErrorBoundary onError={myErrorHandler}>
  <ComponentThatMayError />
</ErrorBoundary>

关于try-catch - 你能用 try/catch block 捕获 React.js 应用程序的所有错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31111771/

相关文章:

php - 使用 Trigger_Error() 尝试/捕捉

java - 在 do ... while() 评估中处理 try/catch 异常的最佳方法?

r - R 中的 tryCatch 无法正常工作

reactjs - 强制使用 SSL 后无法访问 Web list

javascript - 如何通过 this.props.children() 而不是 this.props.children 传递 props

reactjs - 为什么我们不能在 React 中将 bool 值作为 props 传递,它总是要求在我的代码中传递字符串

swift - Swift 3 中的错误处理

java - 输入整数错误抛出

css - JSX 中的 SVG - 如何转换 defs 标签

javascript - Jest URL.createObjectURL 不是函数