我正在将我们的应用程序从反应15.4迁移到反应16。 我们正在使用react的新errorBonudries,这很棒,但它有一个重大问题 - 事件和异步操作不会被错误边界捕获,我需要捕获并记录它们。
我找到的解决方法是使用window.onerror,但看起来像是“吞下”真正的错误细节,因为没有关于错误的真实数据被发送到事件。
对于这种类型的处理是否有任何建议,不包括对我们正在编写的每个事件块使用try / catch?
谢谢!
答案 0 :(得分:0)
对于这种类型的处理,是否有任何建议 包括对我们正在编写的每个事件块使用try / catch吗?
简而言之,否。您必须使用try/catch
块。
这是由于事件处理程序(和其他异步操作)是异步的简单事实,它们不会在与错误边界的render
相同的事件循环迭代中运行。
所以试图达到你在这里的要求就好像你写了这样的东西:
try {
setTimeout(() => {
throw new Error('my error outside the event loop')
}, 0)
} catch (err) {
console.log('error catched!', err)
}
因此,您需要同步渲染和async
操作(本例中为事件处理程序),一种方法是使用setState
和try/catch
阻止。
您尝试使用代码并在捕获时将错误存储在state
中,这将导致重新呈现,然后您可以有条件地呈现错误或收听此更改并记录某些内容。但这种做法远非方便。