异常捕获

18 阅读1分钟

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,优雅的捕获异常