深度理解响应式系统的“递归代理”机制,看 Vue3 如何实现真正的深监听

星雪大大_1113

星雪大大_1113

2026-05-27

626人浏览

原创

vue 3 的深层监听通过 proxy 懒递归代理实现:首次访问嵌套属性时,get 拦截中检测值为对象/数组即调用 reactive 递归包装,逐层创建 proxy;基础类型和内置对象不代理,shallow 系列 api 显式终止递归。

深度理解响应式系统的“递归代理”机制,看 vue3 如何实现真正的深监听

Vue 3 的“深监听”不是靠手动配置触发的,而是响应式系统在初始化时就自动完成的递归代理行为。它不依赖 deep: true 这类开关,本质是 Proxy 对嵌套结构的逐层拦截与再代理。

递归代理是怎么发生的?

当你调用 reactive({ a: { b: { c: 1 } } }),Vue 并不会只给顶层对象加一层 Proxy。它在 get 拦截中判断:如果读取的值是对象(或数组),就立刻用 reactive() 递归包装——也就是对 b 创建新 Proxy,再对 c 所在的对象继续处理。这个过程是懒执行、按需递进的,不是一次性全量展开。

  • 首次访问 obj.a → 触发 get → 发现 a 是对象 → 自动调用 reactive(a)
  • 后续访问 obj.a.b → 同样触发 get → 再次递归代理 b
  • 修改 obj.a.b.c = 2 → 触发 set → 通知依赖更新,且不影响未访问过的分支

为什么 ref 也支持深层响应?

ref 看似包装一层 { value: ... },但它内部仍基于 reactive 实现。例如 ref({ x: { y: 1 } }),其 .value 属性实际指向一个 reactive 对象,所以 .value.x.y 的变化天然可追踪。

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万人学习