我如何处理异常?

IT技术 error-handling exception-handling reactjs
2021-05-25 06:04:30

Angular 有一个很棒的$exceptionHandlerreact.js 有这样的东西吗?

我想将我的错误记录到外部 API。例子:

2个回答

没有像 angular 那样的魔法。如果有一个未捕获的错误,它会向上传播直到它到达窗口,然后发出一个错误事件——与没有react的错误相同的行为。

var App = React.createClass({
  render: function(){
    throw new Error("rawr!");
    return <div>Hello, world!</div>
  }
});

window.addEventListener('error', function(e){
  // e instanceof ErrorEvent
  console.error('caught the error: ' + e.message);
});

chrome 控制台显示错误

如果您研究跨浏览器支持,请更新此答案或添加带有引文的评论。

无需将其记录到控制台(默认情况下已经发生),您可以将其发送到您喜欢的任何地方。

与其他一些框架不同,未捕获的错误始终是代码中的错误。它永远不应该发生。

您可能还需要通过.catch(reportError)在链的末尾显式添加 a并检查它是 TypeError 还是 ReferenceError 来对 promise 错误进行一些特殊处理

虽然@FakeRainBrigand 的回答为理解 Javascript 中一般“未捕获的错误”报告机制的机制提供了一个很好的起点,但我觉得大多数应用程序使用 CDN 托管其 JS 包,而您无法使用“window.addEventListener”捕获未捕获的错误('error', fn)" 机制。

绕过跨域限制

crossorigin属性添加到您的脚本标记中,以便您可以享受使用“window.addEventListener('error', fn)”机制捕获未捕获错误的乐趣。

如果您无法使用 cors 设置

React 16:提供内置的错误处理机制。在此处阅读有关React 中的错误边界的更多信息

React 15 或以下:这里捕获错误的唯一方法是通过在每个渲染/组件周围添加 try-catch 块。幸运的是,我们有一个 npm module - react-guard,它通过修补 React 为我们做到了这一点。