Angular 有一个很棒的$exceptionHandler。react.js 有这样的东西吗?
我想将我的错误记录到外部 API。例子:
Angular 有一个很棒的$exceptionHandler。react.js 有这样的东西吗?
我想将我的错误记录到外部 API。例子:
没有像 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);
});

如果您研究跨浏览器支持,请更新此答案或添加带有引文的评论。
无需将其记录到控制台(默认情况下已经发生),您可以将其发送到您喜欢的任何地方。
与其他一些框架不同,未捕获的错误始终是代码中的错误。它永远不应该发生。
您可能还需要通过.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 为我们做到了这一点。