【问题标题】:how to catch errors globally in react app如何在反应应用程序中全局捕获错误
【发布时间】:2019-03-22 18:22:58
【问题描述】:

我有以下两个文件:

//index.js

ReactDOM.render(<App />, document.getElementById('root'));

// App.js
setTimeout(() => { throw new Error('An error')}, 3000)

class App extends Component {
  render() {return (<div>Hello</div>)}
}

我想在App.js 文件之外捕获此错误,可能在index.js 中。我尝试使用ErrorBoundries (https://reactjs.org/docs/error-boundaries.html),但显然不会捕获组件生命周期之外的错误。

有人建议我使用window.onerror 错误处理程序。我对这种方法的担忧是,即使其中一个外部库抛出错误,也会被触发。有什么相关的吗?

【问题讨论】:

  • 所以..不要throw ?只需调用一个抛出的函数。问题解决了。 throw()
  • 对不起...不太明白...你能告诉我一些代码
  • @MeetZaveri 你读过这个问题吗??

标签: reactjs error-handling try-catch


【解决方案1】:

如果您试图在全局范围内捕获不包括第 3 方内容的错误,那么不要 throw 您自己的错误,只需使用函数并在那里抛出

使用您的确切代码:

// utils.js
export default {
  throw: err => { throw new Error(err) }
}

// App.js
import utils from 'utils'

setTimeout(() => { utils.throw('An error') }, 3000)

class App extends Component {
  render() {return (<div>Hello</div>)}
}

【讨论】:

  • 我不太想接触 App.js 。情况是,我收到了大量可以随意抛出错误的代码。我只是想以某种方式有一个全局错误处理程序来捕获它们,记录到我们的服务器,并向用户显示一条优雅的消息
  • 100% 不可能做你想做的事,并且排除不是由你的代码生成的错误。一旦运行时,您的代码和第 3 方代码之间的差异就会丢失
  • 感谢@azium。情况可能就是这样。就像在 Java 这样的语言中,只需在全局范围内放置一个 try/catch 块就足够了。感谢您的努力
  • 不过这种做法很糟糕......你不应该在 java 或 javascript 中这样做
  • 显示全屏或错误或崩溃的应用程序可能是最糟糕的:)
猜你喜欢
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多