dep是vue响应式系统中负责依赖收集与通知的核心枢纽,它通过subs数组记录关心某数据的watcher,并在数据变更时调用notify()精准通知所有相关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 3 组合式 API 与
热门下载
相关下载
精品课程
相关推荐
/
热门推荐
/
最新课程
最新文章
