onErrorCaptured() 捕获后代组件错误
最后更新:2026-10-22
onErrorCaptured() 捕获后代组件错误
onErrorCaptured() 捕获后代组件渲染/生命周期/侦听器抛出的错误,可阻止错误继续向上冒泡。
| 分组 | 生命周期钩子 |
|---|---|
| 类型 | API |
| 作用域 | 组件内 |
| Vue 版本 | 3.0+ |
| SSR 支持 | 支持 |
📝 语法
onErrorCaptured((err, instance, info) => {
console.error(err)
return false // 返回 false 阻止继续向上传播
})
⚙️ 参数
| err | 错误对象 |
|---|---|
| instance | 抛出错误的组件实例 |
| info | 错误来源描述(render / mounted hook 等) |
返回值:返回 false 阻止错误继续向上传播
▶ 示例
修改下面的代码,在预览区实时查看效果:
输出:
页面显示「已捕获错误:子组件内部错误」,整体不白屏。
💡 要点
💡 提示 在根组件捕获并上报监控平台(Sentry 等)是常见用法。
⚠️ 注意 捕获后仍要处理错误:仅记录不处理会掩盖问题,导致静默失败。
ℹ️ 说明 返回 false 可阻止继续冒泡;不返回则错误继续传给上层与全局 errorHandler。
🏷️ 相关生命周期钩子
💡 相关案例
更多案例即将上线。
📚 相关教程
❓ 常见问题
Q 能捕获子组件异步请求里的错误吗?
A 不能:它只捕获渲染、生命周期钩子、侦听器里同步抛出的错误;Promise 拒绝需自行处理。
Q 和全局 errorHandler 的关系?
A 错误先冒泡到最近的上层捕获点:这里 return false 就不会到全局处理器。
Q 错误边界组件怎么写?
A 包一层父组件用 onErrorCaptured + 条件渲染兜底 UI 即可。