vue响应式系统核心是建立“数据→副作用函数”的双向依赖映射,通过track/trigger机制、activeeffect标记和三层weakmap结构实现按需收集与精准触发,ref与reactive统一于同一追踪流程。

Vue 响应式系统的核心逻辑不是单纯“监听数据变化”,而是建立并维护“谁在用什么数据”这一映射关系——依赖追踪器(Dep/Track-Trigger 机制)正是实现这一点的中枢。
依赖追踪器的本质:双向关联
它不单向地监视数据,而是动态构建“响应式数据 → 副作用函数”的绑定链路。每次读取响应式属性时触发 track,把当前正在执行的 effect(如组件渲染函数、computed getter)记入该属性的依赖集合;每次修改属性时触发 trigger,遍历该集合并重新执行所有 effect。
这个过程依赖两个关键支撑:
- 全局活跃 effect 标记(如 Vue 3 中的
activeEffect),确保 track 知道“此刻是谁在读” - 三层嵌套依赖结构:
WeakMap<target map set>>></target>,既支持对象级代理,又避免内存泄漏
track 的触发时机与条件
track 并非在任意读取时都发生,只在effect 执行上下文内访问响应式数据时才收集依赖。例如:
- 模板中 {{ count }} 渲染时,组件的 render effect 正在运行 → 触发 track
- 普通 JS 变量赋值
let x = obj.count(无 effect 上下文)→ 不收集 - ref.value 被读取时,内部 get 访问器自动调用 track
这意味着依赖关系是“按需建立”的,静态代码不会产生无效依赖。

