errorcaptured是vue 2.5+和vue 3中用于捕获子组件(含孙子)渲染、生命周期钩子、事件处理器、watch或computed同步错误的钩子,不捕获自身错误及未拦截的异步错误;需返回false阻止冒泡。

errorCaptured 是 Vue 2.5+ 和 Vue 3 中用于捕获子组件(含孙子组件)错误的关键钩子,它不处理自身错误,也不捕获未被捕获的异步错误(如 Promise.reject 未 await 或 catch 的情况),但能有效拦截渲染、生命周期钩子、事件处理器、watch 或 computed 同步执行中抛出的异常。
什么时候会触发 errorCaptured?
当子组件树中某一层发生以下任一情况,且该错误未被更内层的 errorCaptured 或 try/catch 拦截时,就会向上冒泡到父组件执行:
- 模板渲染时报错(例如访问 user.profile.name 但 user 为 null)
- 子组件的 created、mounted 等生命周期钩子中 throw 错误
- @click、@input 等绑定的事件处理函数执行失败
- computed 的同步 getter 或 watch 回调中抛出异常(Vue 3 支持)
怎么正确声明和使用?
它是一个接收三个参数的函数:错误对象 err、出错的子组件实例 instance(Vue 3)或 vm(Vue 2)、描述错误来源的字符串 info(如 "render function"、"v-on handler")。
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
- 必须显式返回 false 才能阻止错误继续向上传播(避免触发全局 errorHandler)
- 返回 true、undefined 或不写 return,错误会继续冒泡
- Vue 2 写在选项对象中;Vue 3 可在 defineComponent 的选项中声明,也可在 setup 中用 onErrorCaptured(Composition API 方式)
常见实用场景
适合做局部容错,而不是全局兜底:
- 封装带 fallback UI 的容器组件,比如卡片、列表项,出错时显示“加载失败,请重试”并隐藏异常内容
- 对特定错误类型做降级处理(如 API 超时只提示重试,不中断整个页面)
- 配合状态管理,在父组件中记录错误并控制子模块显隐,避免单点崩溃导致白屏
- 与全局 app.config.errorHandler 协作:errorCaptured 做 UI 层响应,errorHandler 做日志上报和监控
注意事项和限制
容易忽略但很关键:
- 不能捕获当前组件自身的 setup、data、computed 初始化错误(这些属于“自身错误”,需靠 try/catch 或 errorHandler)
- 无法捕获 setTimeout、Promise.then、async/await 中未被 await 的 reject —— 这类要靠 window.addEventListener('unhandledrejection') 或全局 errorHandler 补充
- SSR(服务端渲染)环境下该钩子不生效
- 如果子组件用了 Suspense,errorCaptured 不会捕获其内部异步 setup 抛出的错误
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










