Vue响应式核心是Dep与Watcher通过订阅-发布模式协同:Dep用subs数组收集依赖的Watcher,Watcher在数据变更时异步批量更新;Dep.target临时绑定实现依赖收集,Vue3改用Proxy与activeEffect栈替代。

Vue.js 的响应式核心依赖于 Dep(依赖收集器)和 Watcher(观察者)之间的协同工作:Dep 负责记录哪些 Watcher 依赖于某个响应式数据,Watcher 则在数据变化时被通知并执行更新逻辑。二者通过“订阅-发布”模式通信,不直接持有对方引用,而是借助闭包与全局状态(如 Dep.target)临时建立关联。
Dep 如何收集依赖
每个响应式属性(或 reactive 对象的 key)对应一个独立的 Dep 实例。当组件 render 函数首次执行时,会触发属性的 getter,此时:
- 若存在全局的
Dep.target(即当前正在求值的 Watcher),Dep 将其添加到自己的subs数组中; - Watcher 通过
addDep()方法主动向对应 Dep 实例订阅自己; - Dep 内部使用 Set 去重,避免同一 Watcher 被重复添加。
Watcher 如何触发更新
当响应式数据被修改(触发 setter)时,对应 Dep 实例调用 notify() 方法:
- 遍历
subs中所有 Watcher,依次调用其update()方法; -
update()默认采用异步队列机制(queueWatcher),合并重复更新、去重,并在 nextTick 后批量执行run(); -
run()重新求值(如重新执行 render 函数),并触发视图更新或用户定义的watch回调。
Dep.target 是如何临时绑定的
Dep.target 是一个单例变量,仅在 Watcher 构造和求值阶段被设置:
Vue 3 组合式 API 与
相关专题
Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。
60
2026.10.16
怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。
40
2026.10.16
Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。
40
2026.10.16
本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。
20
2026.10.16
本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。
20
2026.10.16
MySQL忘记密码专题汇集不同版本与系统下的root密码重置方法,覆盖MySQL 5.7、8.0、Mac、Linux及本地集成环境,并提示恢复权限与重新登录的检查步骤。
20
2026.10.15
Vue.js中ref和reactive的区别专题汇集两种响应式API的定义、访问方式、对象解构、侦听与性能取舍等文章,帮助结合实际状态类型选择合适写法。
20
2026.10.15
热门下载
相关下载
精品课程
最新文章

