对Vue2响应式原理的理解-总结

根据这张图进行总结

在这里插入图片描述

组件实例初始化阶段,通过 observe() 方法对 data 对象进行递归遍历。在这个过程中,Vue 使用 Object.defineProperty()data 中的每个属性定义 gettersetter 来拦截对象属性的“读取“操作和“写入”操作。

Vue 的依赖追踪是通过 WatcherDep 协同完成的。其中,每个响应式属性背后都对应一个 Dep 对象,负责收集依赖(即 Watcher)并在数据变更时通知更新。

组件挂载阶段,Vue 会自动创建一个渲染 Watcher。该 Watcher 会执行组件的 render 函数,并在执行过程中读取模板中所用到的响应式数据。这些数据的读取会触发它们的 getter,从而使当前正在运行的 Watcher(即渲染 Watcher)被 Dep 收集为依赖。

这个过程叫做 依赖收集(Dependency Collection)。大概的过程是:

  • Watcher 在评估表达式(执行它所监听的函数或访问的数据)或渲染函数之前,把自身赋值给 Dep.target;
  • 当访问响应式属性时,触发其 getter;
  • 在 getter 中调用 dep.depend(),把当前 Dep.target(Watcher)添加到依赖列表中;
  • 当属性变化时,setter 被触发,Dep 会通过 dep.notify() 通知所有依赖该属性的 Watcher 执行更新逻辑。

Vue 中的 Watcher 有三种类型:

  1. 渲染 Watcher:用于渲染视图;
  2. 计算属性 Watcher:用于计算属性的缓存与依赖追踪;
  3. 侦听器 Watcher:用于执行 watch 回调函数。

总结:

在 Vue 的响应式系统中,Observer 负责劫持数据,Dep 负责依赖管理,而 Watcher 是响应式更新的执行者。组件挂载时创建渲染 Watcher,读取数据触发 getter,完成依赖收集。数据变更时,依赖该数据的 Watcher 会被通知更新,从而驱动视图响应式变化。

组件关键词作用
Observer劫持将数据变成响应式
Dep收集依赖保存 Watcher 列表
Watcher更新逻辑数据变了就执行
Compile模板解析把模板变成 Watcher
View自动更新Watcher 通知它变化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/909983.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/909983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于深度学习的智能音频增强系统:技术与实践

前言 在音频处理领域,音频增强技术一直是研究的热点。音频增强的目标是改善音频信号的质量,去除噪声、回声等干扰,提高音频的可听性和可用性。传统的音频增强方法主要依赖于信号处理技术,如滤波器设计、频谱减法等,但这…

从代码学习深度强化学习 - DQN PyTorch版

文章目录 前言DQN 算法核心思想Q-Learning 与函数近似经验回放 (Experience Replay)目标网络 (Target Network)PyTorch 代码实现详解1. 环境与辅助函数2. 经验回放池 (ReplayBuffer)3. Q网络 (Qnet)4. DQN 主类5. 训练循环6. 设置超参数与开始训练训练结果与分析总结前言 欢迎…

AI与大数据如何驱动工业品电商平台的智能决策?

在轰鸣的工厂里,一台关键设备因某个密封圈失效而骤然停机。生产线停滞、订单延误、经济损失每分钟都在扩大。此刻,采购经理在工业品电商平台上疯狂搜索,却迷失在海量零件参数与供应商信息中。工业品的沉默,往往意味着生产线的沉默…

连接器全解析:数据库连接器和文件连接器的区别和联系

目录 一、数据库连接器和文件连接器的基本概念 1. 数据库连接器 2. 文件连接器 二、数据库连接器和文件连接器的区别 1. 数据存储方式 2. 数据处理能力 3. 数据安全性 4. 数据更新频率 三、数据库连接器和文件连接器的联系 1. 数据交互 2. 数据处理流程 3. 应用场景…

Uniapp 中根据不同离开页面方式处理 `onHide` 的方法

Uniapp 中根据不同离开页面方式处理 onHide 的方法 在 Uniapp 开发中,onHide 生命周期会在页面隐藏时触发,但默认无法直接区分用户是通过何种方式离开页面的。不过我们可以通过组合其他钩子函数和路由事件来实现对不同离开方式的识别和处理。 一、常见…

使用Visual Studio Code实现文件比较功能

Visual Studio Code 中如何使用文件比较功能? 在 Visual Studio Code (VS Code) 中使用“比较文件”功能来查看两个文件之间的差异是非常直观的。 以下是具体步骤: 使用“比较文件”功能 打开 VS Code: 启动 VS Code 编辑器。 打开第一…

(40)华为云平台cce中挂载nginx等配置文件方法

直接在负载中添加数据存储: 将nginx.conf文件分别存放在集群中每个cce节点对应的路径下即可(防止pod飘节点找不到nginx.conf) 2.直接添加配置项与密钥: 添加对应的key与value即可(nginx.conf的具体配置写在value中&am…

web布局09

Flexbox 是现代 Web 布局的主流技术之一,它提供了一种有效的方式来定位 、排序 和 分布元素,即使在视窗或元素大小不明确或动态变化时亦是如此。Flexbox 的优势可以用一句话来表达:“在不需要复杂的计算之下,元素的大小和顺序可以…

Redux and vue devtools插件下载

Redux and vue devtools插件下载 插件下载地址 收藏猫插件

深入理解SQLMesh中的SCD Type 2:缓慢变化维度的实现与管理

在数据仓库和商业智能领域,处理随时间变化的数据是一个常见且具有挑战性的任务。缓慢变化维度(Slowly Changing Dimensions, SCD)是解决这一问题的经典模式。本文将深入探讨SQLMesh中SCD Type 2的实现方式、配置选项以及实际应用场景。 什么是SCD Type 2&#xff1f…

如何保证MySQL与Redis数据一致性方案详解

目录 一、数据不一致性的根源 1.1 典型不一致场景 1.2 关键矛盾点 二、一致性保障策略 2.1 基础策略:更新数据库与缓存的时序选择 (1)先更新数据库,再删除缓存 (2)先删缓存,再更新数据库…

JSON-RPC 2.0 与 1.0 对比总结

JSON-RPC 2.0 与 1.0 对比总结 一、核心特性对比 特性JSON-RPC 1.0JSON-RPC 2.0协议版本标识无显式版本字段,依赖 method 和参数结构区分[5]。强制包含 "jsonrpc": "2.0" 字段,明确版本[1][4]。参数结构仅支持索引数组(…

C# 事件详解

C# 事件 一、事件二、事件的应用三、事件的自定义声明 一、事件 定义:“a thing that happens, especially something important” / “能够发生的什么事情”角色:使对象或类具备通知能力的成员使用:用于对象或类间的动作协调与信息传递事件…

青少年编程与数学 01-011 系统软件简介 24 Kubernetes 容器编排系统

青少年编程与数学 01-011 系统软件简介 24 Kubernetes 容器编排系统 一、历史沿革(一)起源1. Google 内部起源 (二)开源后的关键事件(三)社区治理 二、技术架构(一)分层设计哲学&…

[C++] : 谈谈IO流

C IO流 引言 谈到IO流,有些读者可能脑海中第一个想到的C程序员的最基础的std::cout , std::cin两个类的使用,对的,这个就是一个典型的IO流,所以逆天我们这篇文章会基于C IO流的原理和各种应用场景进行深入的解读。 C…

Kafka 3.0零拷贝技术全链路源码深度剖析:从发送端到日志存储的极致优化

在分布式消息系统领域,Kafka凭借高吞吐、低延迟的特性成为行业首选。而零拷贝技术作为Kafka性能优化的核心引擎,贯穿于消息从生产者发送、Broker接收存储到消费者读取的全生命周期。本文基于Kafka 3.0版本,深入源码层面,对零拷贝技…

利益驱动机制下开源AI智能名片链动2+1模式与S2B2C商城小程序的商业协同研究

摘要:在数字经济时代,利益驱动作为用户行为激励的核心逻辑,正通过技术创新实现模式升级。本文基于“利益驱动”理论框架,结合“开源AI智能名片链动21模式S2B2C商城小程序”的技术架构,系统分析物质利益(返现…

pytest的前置后置条件

1. setUp()和tearDown() setup()函数主要是进行测试前的初始化工作,比如:在接口测试前面做一些前置的参数赋值,数据库操作等等。 teardown()函数是测试后的清除工作,比如:参数还原或销毁,数据库的还原恢复…

Python 自动化运维与DevOps实践

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 基础设施即代码(IaC) 使用Fabric执行远程命令 python 复制 下载 from fabric import Connectiondef deploy_app():# 连接到远程服务器with Connection(web-server.example.com, userdeploy,…

css3 文本效果(text-shadow、text-overflow、word-wrap、word-break)文本阴影、文本换行、文本溢出并隐藏显示省略号

1. 文本阴影(text-shadow) 1.1 基本语法 text-shadow: h-shadow v-shadow blur-radius color;参数说明: h-shadow:必需。水平阴影的位置。允许负值。 正值:向右偏移负值:向左偏移 v-shadow:必…