如何在React应用程序中全局捕获错误

时间:2018-10-18 01:16:49

标签: reactjs error-handling try-catch

我有以下两个文件:

//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中)捕获此错误。我尝试使用ErrorBoundrieshttps://reactjs.org/docs/error-boundaries.html),但显然不会捕获组件生命周期之外的错误。

有人建议我使用window.onerror错误处理程序。我对这种方法的担心是,即使外部库之一抛出错误,也会触发该错误。对此有何评论?

1 个答案:

答案 0 :(得分:0)

如果您尝试全局捕获不包含第三者的错误,那么不要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>)}
}