ErrorBoundary
componentDidCatch
可捕获的异常:
- 子组件渲染
- 生命周期函数
- 构造函数
try...catch
可捕获同步方法和async/await的异常
window.onerror
可捕获同步方法和异步方法
error
// 可捕获同步方法、异步方法和资源加载的异常
window.addEventListener('error', onError, true);
// 扩展:window.addEventListener第三个参数
- true: 用于捕获阶段
- false(default): 用于冒泡阶段
- {
capture: false, // 等同于布尔值参数,决定事件是在捕获阶段还是冒泡阶段处理
once: false, // 如果为 true,则事件处理函数在执行一次后会被自动移除
passive: false, // 如果为 true,表示事件处理函数不会调用 preventDefault(),用于提高滚动性能
}
- 在移动端开发中, passive: true 特别有用,可以提高页面滚动的性能,因为浏览器不需要等待事件处理完成就可以开始滚动。
unhandledrejection
捕获未被捕获的Promise异常
参考
参考库:react-error-catch[基于ErrorBoundary、error和unhandledrejection封装]
以上参考自React,优雅的捕获异常