news 2026/7/22 10:44:14

VUE 的基本原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VUE 的基本原理

一、基本原理

当一个 Vue 实例创建时,Vue 会遍历 data 中的属性,用 Object.defineProperty(vue3.0 使用 proxy) 将它们转为 getter/setter,并且在内部追踪相关依赖,在属性被访问和修改时通知变化。每个组件实例都有相应的 watcher 程序实例,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的 setter 被调用时,会通知 watcher 重新计算,从而致使它关联的组件得以更新。

二、更细致的理解

vue 的基本原理也就是:响应式原理。Vue 的“响应式”简单说就是:数据变了,页面自动更新,不需要你手动操作 DOM。

1. 当 Vue 实例创建时发生了什么?

Vue 会对 data 对象里的所有属性做“劫持”:

  • Vue 2 用Object.defineProperty(简称 defineProperty)
  • Vue 3 用Proxy(性能更好)

这个过程叫数据劫持响应式转换

2. Object.defineProperty 是怎么工作的?(Vue 2)

Vue 遍历 data 对象,对每个属性用 defineProperty 改写成:

  • getter:当你读取这个属性时触发(get)
  • setter:当你修改这个属性时触发(set)
  • // 简化版伪代码,Vue 内部就是这么做的 function defineReactive(obj, key, val) { Object.defineProperty(obj, key, { enumerable: true, // 可枚举 configurable: true, // 可配置 get() { console.log(`读取 ${key}:${val}`); // Dep:依赖收集者 -> 记录“谁”在用这个属性 if (Dep.target) { // Dep.target 是当前 Watcher dep.depend(); // 把 Watcher 加到依赖列表 } return val; }, set(newVal) { if (newVal === val) return; console.log(`修改 ${key}:${val} → ${newVal}`); val = newVal; // 通知更新:派发更新 dep.notify(); // 告诉所有依赖这个属性的 Watcher:“数据变了,快更新!” } }); }
  • 依赖收集:在 get 时,把当前正在渲染的组件(Watcher)记录下来(“谁依赖了我”)。
  • 派发更新:在 set 时,通知所有依赖它的 Watcher:“数据变了,去重新渲染吧”。

3. Watcher 是什么?它怎么工作?

每个组件都有一个对应的Watcher(订阅者):

  • 组件第一次渲染时,会触发所有 data 属性的 get → 收集依赖(Dep 收集 Watcher)。
  • 数据变化时,set 触发 → Dep 通知所有 Watcher → Watcher 重新执行渲染函数 → 更新 DOM。

一句话:Watcher 就是“订阅者”,它订阅了 data 的变化,数据一变,它就重新渲染组件。

4. 依赖收集和派发更新的完整流程(Vue 2)

  1. 组件渲染 → 访问 data 属性 → 触发 get → Dep 收集当前 Watcher(依赖收集)。
  2. 数据修改 → 触发 set → Dep 通知所有 Watcher(派发更新)。
  3. Watcher 收到通知 → 重新执行 render → 生成新 VNode → diff → 更新真实 DOM。

5. 总结一句话

Vue 的响应式核心是通过数据劫持 + 发布订阅模式实现的:Vue 2 用 Object.defineProperty 劫持属性,Vue 3 用 Proxy 劫持对象。在渲染时收集依赖(get 时记录 Watcher),数据变化时派发更新(set 时通知 Watcher 重新渲染),实现‘数据变 → 页面自动更新’。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 19:09:26

人工智能应用-机器听觉: 05.基于模式匹配的语音识别

早期的语音识别技术就是基于“不同发音的共振峰不同”这一原理,通过分析语音的共振峰来区分不同的发音。1952 年,AT&T 公司的科学家首次利用语音的第一和第二共振峰实现了对十个英文数字的识别。如图 所示,每个小图对应一个数字&#xff…

作者头像 李华
网站建设 2026/7/16 15:22:28

【Django毕设源码分享】基于Django框架的物资配送管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/13 19:51:45

导师严选2026 TOP8 AI论文写作软件:研究生毕业论文全场景测评

导师严选2026 TOP8 AI论文写作软件:研究生毕业论文全场景测评 2026年AI论文写作软件测评:精准适配学术场景的工具选择指南 随着人工智能技术在学术领域的深入应用,越来越多的研究生开始依赖AI写作工具提升论文撰写效率。然而,面…

作者头像 李华
网站建设 2026/7/13 18:54:44

PCB裸铜+助焊剂体系兼容性怎么评估?

问:裸铜与助焊剂的兼容性核心看什么?为啥有的助焊剂配裸铜焊盘,焊接效果特别差? 裸铜与助焊剂的兼容性,核心不是看助焊剂的品牌或价格,而是看助焊剂的除氧化能力与裸铜表面氧化状态的匹配度,再…

作者头像 李华
网站建设 2026/7/15 7:29:35

知识图谱赋能创新生态,构建数据驱动时代技术转移新模式

科易网AI技术转移与科技成果转化研究院 在全球化与数字化浪潮的交织下,科技创新已成为推动经济高质量发展的核心引擎。然而,科技成果转化作为科技创新价值实现的关键环节,长期面临信息不对称、资源分散、路径模糊等痛点。如何打破壁垒&#…

作者头像 李华
网站建设 2026/7/15 8:23:11

知识图谱赋能技术转移,构建创新生态新范式

科易网AI技术转移与科技成果转化研究院 在全球化竞争日益激烈的科技创新时代,技术转移作为推动科技成果从实验室走向市场的关键环节,正经历着前所未有的变革。传统模式下,信息不对称、资源分散、转化路径不明确等问题严重制约了技术转移效…

作者头像 李华