Vue.js 组件卸载逻辑在渲染管线中的资源回收

老浩君_5000

老浩君_5000

2026-07-20

142人浏览

原创

vue组件卸载是分阶段资源回收过程:先递归卸载子vnode,再触发beforeunmount/unmounted钩子,最后移除dom;onunmounted是最安全清理入口,需显式销毁第三方库、清除定时器、解绑事件、终止请求;effectscope和watcheffect的oninvalidate可自动化管理副作用。

vue.js 组件卸载逻辑在渲染管线中的资源回收

Vue.js 组件卸载不是简单地删掉 DOM,而是渲染管线中一个有明确顺序、分阶段执行的资源回收过程。它依赖 vnode 的 diff 和卸载流程提供清理时机,真正释放资源靠的是开发者在正确位置写清理逻辑。

卸载流程:vnode 递归卸载 → 钩子触发 → DOM 移除

当组件因 v-if 为 false、路由切换或手动调用 unmount() 而退出时,Vue 渲染器启动卸载流程:

  • 先递归卸载所有子 vnode,确保嵌套组件、动态内容、过渡节点等全部完成退出
  • 再执行指令的 beforeUnmount 和 unmounted 钩子,让自定义指令(如拖拽、焦点管理)有机会解绑事件、清除定时器
  • 最后调用平台层移除操作(hostRemove(el)),清空 vnode.el 和 vnode.component 引用,真实 DOM 节点才被移除

onUnmounted 是最常用也最安全的清理入口

这个钩子在 vnode 从树中移出、DOM 尚未被移除时执行,此时组件实例仍完整可用,能安全访问 ref、调用 unwatch、关闭第三方实例:

vue-composition-api-best-practices
vue-composition-api-best-practices

Vue 3 组合式 API 与

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 17.1万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.5万人学习