Vue 渲染流程中的数据劫持与虚拟 DOM 怎么联动?响应式触发 Patch 逻辑

秋强大大_1096

秋强大大_1096

2026-05-03

544人浏览

原创

vue响应式系统与虚拟dom渲染通过依赖收集→派发更新→重新渲染→patch链条联动:数据劫持感知变化,render生成vnode,diff对比后patch更新真实dom。

vue 渲染流程中的数据劫持与虚拟 dom 怎么联动?响应式触发 patch 逻辑

Vue 的响应式系统和虚拟 DOM 渲染流程是紧密耦合的:数据劫持负责“感知变化”,虚拟 DOM 负责“计算差异”,而 Patch(打补丁)是把差异真正应用到真实 DOM 的关键环节。它们不是独立运行,而是通过依赖收集 → 派发更新 → 重新渲染 → 对比 patch 这一链条联动起来。

数据劫持:让属性访问可追踪

Vue 2 使用 Object.defineProperty,Vue 3 使用 Proxy,目标一致:在读取(getter)时收集当前正在执行的渲染函数作为依赖,在设置(setter)时通知这些依赖更新。

例如:data() { return { count: 0 } } 中的 count 被劫持后,模板中 {{ count }} 渲染时会触发 getter,此时 Vue 记下“这个渲染函数依赖 count”。

  • 每个响应式属性对应一个 Dep 实例,管理一组 Watcher(Vue 2)或 ReactiveEffect(Vue 3)
  • 组件挂载时,会创建一个渲染 watcher/effect,它包裹了 render() 函数,并在首次执行时触发所有模板中用到的数据读取,完成依赖收集

响应式触发更新:setter 唤醒依赖

当 this.count = 1 被赋值,setter 触发,对应 Dep 通知所有收集到的 watcher/effect 重新执行。

注意:这里不会立即操作 DOM,只是标记“需要重新渲染”。Vue 会将更新任务推入异步队列(nextTick 微任务),批量处理,避免重复渲染。

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

Vue 3 组合式 API 与

热门下载

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

精品课程

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

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 17.2万人学习

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

共26课时 | 2.5万人学习