我正在尝试将错误捕获添加到组件的渲染函数中。当我在实际的渲染函数中抛出错误时,这可以正常工作,但是如果组件的子级中存在错误,则尝试不会捕获错误(或者它们被子组件错误处理程序拦截,我不确定?
是否存在将错误强制到父级的方法。
const SimpleComponent = React.createClass({
render: function(){
try{
throw 'new error'
return <div>{this.props.children}</div>
}catch(e){
console.log('error', e);
}
}
})
上述工作
const SimpleComponent = React.createClass({
render: function(){
try{
return <div>{this.props.children}</div>
}catch(e){
console.log('error', e);
}
}
})
const ChildComponent = React.createClass({
render: function(){
throw 'child error'
}
})
<SimpleComponent>
<ChildComponent />
</SimpleComponent>
这上面不抓
我建议在父组件中使用(当前)不稳定的生命周期事件unstable_handleError
。
public unstable_handleError(err: any) {
this.setState({
error: err
});
}
在未来的版本中,错误挂钩可能会成为官方API。详情见本期
https://github.com/facebook/react/issues/2461
您可以利用React的BatchingStrategyAPI轻松地将<code>try/catch<code>包装在所有React代码周围。此窗口的好处在于<code>窗口。onerror是,在所有浏览器中都可以获得很好的堆栈跟踪。即使是像Microsoft Edge和Safari这样的现代浏览器也不提供对window.onerror
的堆栈跟踪。
请注意,此解决方案并不总是防止React进入不良状态。但是,此解决方案至少允许您处理错误,例如显示错误横幅/模式,或将堆栈跟踪错误日志发送到您的服务。
以下是React 15.4的外观:
import ReactUpdates from "react-dom/lib/ReactUpdates";
import ReactDefaultBatchingStrategy from "react-dom/lib/ReactDefaultBatchingStrategy";
let isHandlingError = false;
const ReactTryCatchBatchingStrategy = {
// this is part of the BatchingStrategy API. simply pass along
// what the default batching strategy would do.
get isBatchingUpdates () { return ReactDefaultBatchingStrategy.isBatchingUpdates; },
batchedUpdates (...args) {
try {
ReactDefaultBatchingStrategy.batchedUpdates(...args);
} catch (e) {
if (isHandlingError) {
// our error handling code threw an error. just throw now
throw e;
}
isHandlingError = true;
try {
// replace this with whatever error handling logic you like.
// e.g. dispatch redux action notifying the app that an error occurred:
// `store.dispatch({type: "EXCEPTION", payload: e});`
console.error(e);
} finally {
isHandlingError = false;
}
}
},
};
ReactUpdates.injection.injectBatchingStrategy(ReactTryCatchBatchingStrategy);
完整文章在这里:https://engineering.classdojo.com/blog/2016/12/10/catching-react-errors/
使用反应16中的组件DidCatch()方法。
查看更多信息
有什么方法可以捕获“删除级联”事件吗?我在Debezium常见问题解答(在页面底部)中读到: ==为什么在某些情况下我看不到删除事件? 这可能是使用语句造成的。在本例中,数据库https://dev.mysql.com/doc/refman/5.7/en/innodb-and-mysql-replication.html生成的删除事件[不是binlog的一部分],因此Debezium无法捕获。 我
我有一个存储过程似乎没有正确记录错误。 代码有错误,但 catch 块似乎未生效。 try块相当长,但错误部分很简单,并且在最后出现,所以我已经对此进行了预测。 proc失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误 - 这是一个愚蠢的懒惰错误 - 但我感到困惑为什么我的错误日志记录过程似乎没有工作 - 没有行入到我的 ExtractsErrorLog 表中。
我在PHP中遇到了一个奇怪的问题,与symfony 1.4 我有一个启动多个工作线程的任务,有时,我需要停止所有工作线程(例如,在部署之后)。 我使用开始停止守护程序启动任务,我想通过向它发送信号SIGINT来停止它。 所以,这是我的代码: 我所做的非常简单:我分叉,创建N个子进程,在父进程中,我添加一个pcntl_signal来捕获SIGINT信号。signalHanlder函数检索子PID的列
我已经写了一个节点。使用express框架的jsapi。我正在使用wait和async。我在try-catch块中捕获异步函数。但是,在catch(err)方法中,不会返回err。 在上面的例子中,我故意调用一个不存在的函数,这样它就会抛出一个错误。 我得到的答复如下。它正在命中catch块,但没有将错误添加到数据对象中。 但是,如果我将下面的行移出try catch块。控制台将抛出以下错误。 所
我无法用axios捕捉错误响应。怎么做?我用的是: 我看到ajax请求的结果有400个状态代码,响应主体看起来像(Django后端)。没关系,我已经准备好在catch处理程序中处理这些错误了。 但是它们转到成功处理程序。为何如此?我在控制台中看到以下输出: 成功处理程序接收axios错误对象作为结果。为什么会这样,下一步该怎么办?此错误对象不包含任何有用信息。 UPD。实际上,错误对象包含有用的信
我有一个应用程序使用了log4j1.2.17,现在我想把它更改为log4j2。所以我更改了pom.xml(我确信我已经删除了任何依赖项中的log4j1),添加了log4j2.xml。log4j2工作得很好,它记录了我想要的信息。 我查看log4j的问题。LOG4J2-2026似乎可以解决这个问题,但是我使用的log4j2版本已经是2.9.1了。我不知道是什么原因造成这个错误。