Vue响应式系统中Dep依赖管理器原理,图解Watcher订阅发布机制

夏静君_8418

夏静君_8418

2026-05-30

868人浏览

原创

dep是vue响应式系统中负责依赖收集与通知的核心枢纽,它通过subs数组记录关心某数据的watcher,并在数据变更时调用notify()精准通知所有相关watcher。

vue响应式系统中dep依赖管理器原理,图解watcher订阅发布机制

Vue响应式系统中,Dep 是依赖管理的核心枢纽,它不直接监听数据,也不执行更新逻辑,而是专注做一件事:**记录谁关心哪个数据、并在数据变化时精准通知所有相关方**。它的存在,让 Observer 和 Watcher 能解耦协作——Observer 只管“我变了”,Watcher 只管“我该做什么”,中间靠 Dep 来牵线。

Dep 是什么:一个带“通讯录”的发布中心

Dep(Dependency 的缩写)本质是一个依赖容器,内部维护一个 subs 数组,里面存的全是当前属性所关联的 Watcher 实例。它本身没有状态感知能力,但有两个关键动作:

  • depend():当某个属性被读取(比如模板渲染或 computed 计算时触发 getter),Dep 就会检查全局静态变量 Dep.target 是否存在;如果存在(通常就是当前正在求值的 Watcher),就调用 target.addDep(this),把自己加进该 Watcher 的依赖列表,同时让 Watcher 把自己加入 subs —— 这就是“依赖收集”。
  • notify():当属性被修改(setter 触发),Dep 遍历 subs,对每个 Watcher 调用其 update() 方法 —— 这就是“派发通知”。

Watcher 怎么成为“订阅者”:靠 Dep.target 建立临时通道

Watcher 在实例化时,会主动把自身赋值给 Dep.target(通过 pushTarget(this)),然后去访问响应式数据(如 this.message)。此时数据的 getter 被触发,自动执行 dep.depend(),完成双向绑定:Watcher 记住 dep,dep 也记住 Watcher。

这个过程是临时且受控的:

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