Appearance
全局性兼容:定义默认的 componentDidCatch 方法
本节目标:理解“全局性兼容:定义默认的 componentDidCatch 方法”的核心思路,并能把它用于实际开发或面试表达。 对于开发已久的存在数百上千个组件的庞大应用来说,给主要组件增加错误边界逻辑这个工作仍然会变得繁琐不堪,仅给主模块组件设置则会使得局部组件的异常放大到整个模块内。一种简单的处理方式可以是给
React.Component定义默认的生命周期方法componentDidCatch:
if (!React.Component.prototype.componentDidCatch) {
React.Component.prototype.componentDidCatch = (error, info) => {
return Sentry.captureException(error, null, info);
}
}因为所有组件都是继承于 React.Component,所以所有组件都继承了默认的生命周期方法componentDidCatch,所以出现渲染异常的组件会在其父组件被拦截和处理。
当然因为没有在 componentDidCatch 方法中自行更新 state 或定义 static getDerivedStateFromError 方法更新 UI,React 还是会抛出一个 Warning 警告,但至少不会导致整个应用都被卸载了。
当然,最根本的还是不应仅依赖于输入数据的常规格式,应要求组件开发尽量充分地考虑异常判断与处理,以保证组件自身的健壮性。 > 来自
<http://lzw.me/a/react-16-error-boundaries.html>