前端面试题26(vue3中响应式实现原理)

news2024/9/22 7:33:19

在这里插入图片描述
Vue 3 中响应式系统的实现主要依赖于 ES6 的 Proxy 对象,这与 Vue 2 中使用 Object.defineProperty 的方式有着本质的区别。Proxy 提供了一种更为强大且灵活的方法来拦截和定制对象的操作,例如获取、设置属性值等。下面是对 Vue 3 响应式系统实现方式的详细解析:

1. 数据劫持

在 Vue 3 中,当你使用 reactive 函数包装一个对象时,实际上是在创建一个基于 Proxy 的代理对象。这个代理对象会拦截所有对原始对象的访问和修改操作。

import { reactive } from 'vue';

const state = reactive({ count: 0 });

在这个例子中,state 对象实际上是一个 Proxy,它代理了 { count: 0 } 对象的所有操作。

2. 依赖收集

当一个组件或函数访问 state.count 属性时,Proxyget 方法会被触发。此时,Vue 3 的响应式系统会记录下这次访问,从而建立起一个依赖关系。这意味着如果 state.count 的值发生了变化,那么所有依赖它的观察者(比如组件中的模板表达式或计算属性)都会被标记为“脏”(outdated)。

const computedCount = computed(() => state.count);

在上面的例子中,computedCount 计算属性现在依赖于 state.count 的值。

3. 派发更新

state.count 的值通过 Proxyset 方法被改变时,响应式系统会遍历所有依赖于 state.count 的观察者,并通知它们数据已经更新。这些观察者随后会被重新执行,以反映最新的数据状态。对于组件而言,这就意味着重新渲染以更新 UI。

4. 副作用函数与调度

Vue 3 引入了副作用函数的概念,这是通过 effect 函数来创建的。副作用函数会在依赖的响应式数据发生变化时自动重新执行。Vue 3 还提供了调度机制,确保副作用函数的执行时机是最优的,通常是在组件更新周期的适当阶段。

const effectFn = effect(() => {
  console.log(state.count);
});

在这个例子中,每次 state.count 的值发生变化,effectFn 都会被重新执行。

5. 其他响应式 API

除了 reactive,Vue 3 还提供了其他的响应式 API,比如 refshallowReactive 等。ref 创建的是一个具有 .value 属性的对象,而 shallowReactive 则仅让对象的第一层属性变为响应式的。

综上所述,Vue 3 的响应式系统是基于 Proxy 的数据劫持、依赖收集和更新派发机制构建的,这一机制比 Vue 2 更加高效和强大,同时也支持更广泛的数据类型和结构。

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

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

相关文章

鸿蒙语言基础类库:【@ohos.util.TreeSet (非线性容器TreeSet)】

非线性容器TreeSet 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 T…

PLC数据采集网关的具体使用说明-天拓四方

PLC数据采集网关通过以太网、串口等通信接口与PLC设备连接,实现数据的实时采集。网关内置数据处理模块,可以对采集到的数据进行清洗、转换和存储,以满足不同应用场景的需求。同时,PLC数据采集网关支持多种通信协议,如M…

用python生成带图片的二维码(python实例二十二)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.带图片的二维码 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读…

每日一题~abc356(对于一串连续数字 找规律,开数值桶算贡献)

添加链接描述 题意:对于给定的n,m 。计算0~n 每一个数和m & 之后,得到的数 的二进制中 1的个数的和。 一位一位的算。最多是60位。 我们只需要计算 在 1-n这些数上,有多少个数 第i位 为1. 因为是连续的自然数,每一位上1 的…

32 华三vlan案例+STP

32 华三vlan案例STP 1 开启STP 显示根桥信息 查看stp中的接口角色 查看设备的根桥ID 最小的值是根网桥 原则一 网络初始化时,网络中所有的STP设备都认为自己是“根桥”,根桥ID为自身的设备ID。通过交换BPDU,设备之间比较根桥ID,网…

品牌策划必读:9本改变游戏规则的营销经典

作为深耕品牌十余年的策划人,这些年自学啃下的书不计其数。 这里特意挑选了几本知名度不高但是却非常有用的“遗珠”优质品牌策划书籍分享出来。 如果你是一位初步了解品牌的人,这些书籍既包含了品牌理论基础,也有实用的实践指导。 这些书…

【区块链 + 智慧政务】省级一体化区块链平台 | FISCO BCOS应用案例

在加强数字政府建设的大背景下,科大讯飞广泛应用数字技术于政府管理服务,推动政府数字化、智能化运行。同时, 统筹推进业务、数据和技术的融合,提升跨地域、跨层级、跨部门和跨业务的协同管理和服务水平。 当前政务信息化建设中&…

Apache配置与应用(企业网站架构部署与优化)

本章结构 如果要修改以上文件中的内容,想要生效,需要在主配置文件中能够扫描到这个默认文件的修改: 文件在: Apache 连接保持 Apache 的访问控制 针对IP地址的限制缺陷是不可预知性,需要事先直到对方的IP才能进行基于…

VIM模式之间的切换

命令行界面下,常用的文本编辑器是 VI / VIM(VI增强版),VI 是 Linux 最通用的文本编辑器,VIM相较于VI,提供了代码高亮等功能,两者用法完全兼容; 1. 进入 VIM 工作界面 vim 文件名 2. 进入编辑模式 三种方…

ZFT9-7VE8043-Z同期脉冲发送装置100V JOSEF约瑟 柜内安装

ZFT9(PIG)同期脉冲发送装置 系列型号 ZFT9(PIG) 7VE8033同期脉冲发送装置; ZFT9(PIG) 7VE8043同期脉冲发送装置; ZFT9 7VE8033同期脉冲发送装置; ZFT9 7VE8043同期脉冲发送装置; 用途: ZFT9同期脉冲发送装置用于船舶的三相系统,根据发电机和电力系…

Ceph资源池pool管理

目录 1.Ceph Pool管理命令 1.1 创建 Pool 资源池 1.2 查看集群 Pool 信息 1.3 查看资源池副本、PG 和 PGP的数量 1.4 修改 Pool 副本、PG 和 PGP数量 1.5 删除 Pool 资源池 2.一个pool资源池应该包含多少PG数? 完成了 Ceph 集群的部署,但是我们如…

从零开学C++:类和对象(上)

引言:在学习了C的入门级知识之后,现在就让我们一起进入类和对象的学习吧,该知识点我将分为上,中,下三个部分对其进行讲解。 更多有关C语言和数据结构的知识详解可前往个人主页:计信猫 目录 一,类…

【RHCE】NFS 实验

主服务器 下载nfs-utils软件包: 1.如果停⽌该服务,启动并启⽤该服务: systemctl enable - now rpcbind 2.要启动 NFS 服务器,并使其在引导时⾃动启动:systemctl enable - now nfs- server 3.配置防火墙,开…

RAG应用的典型工作流程

下面是RAG应用的典型工作流程: 具体步骤如下: 输入: 是指LLM系统需要回答的问题。如果不使用RAG,问题直接由LLM回答。 索引: 使用RAG时,会先将相关文档分块,为这些块生成嵌入向量,并…

prometheus回顾(2)--如何使用Grafana对接Prometheus数据源的详细过程,清晰易懂。

文章目录 Grafana简介什么是GrafanaGrafana 能做什么?什么时候我们会用到Grafana?Prometheus有图形化展示,为什么我们还要用Grafana? 环境操作步骤一、Grafana安装二、Grafana数据源Prometheus添加三、Grafana添加数据仪表盘补充、如何查找仪表盘 Graf…

力扣题解(设计跳表)

1206.设计跳表 已解答 不使用任何库函数,设计一个 跳表 。 跳表 是在 O(log(n)) 时间内完成增加、删除、搜索操作的数据结构。跳表相比于树堆与红黑树,其功能与性能相当,并且跳表的代码长度相较下更短,其设计思想与链表相似。 …

09.C2W4.Word Embeddings with Neural Networks

往期文章请点这里 目录 OverviewBasic Word RepresentationsIntegersOne-hot vectors Word EmbeddingsMeaning as vectorsWord embedding vectors Word embedding processWord Embedding MethodsBasic word embedding methodsAdvanced word embedding methods Continuous Bag-…

汉初三杰韩信,是不是颍川人

再重复一次,此韩信非彼韩信,说的是汉初三杰淮阴侯韩信,不是韩王信。 他俩的共同之处还真多,同名同姓,都被封王,八大异姓王韩姓占了两位。而且,结局也一样,都因反判罪被朝廷处死。这…

图书馆、档案馆、博物馆之智能建筑设计要求比较

关注我们 - 数字罗塞塔计划 - 随着科技的不断进步以及人们对建筑功能需求的日益提升,智能化技术在建筑领域的应用越来越广泛。将建筑物的结构、系统、服务和管理根据用户的需求进行最优化组合,进而为用户提供一个高效、舒适、便利的人性化建筑环境&…

通过Arcgis从逐月平均气温数据中提取并计算年平均气温

通过Arcgis快速将逐月平均气温数据生成年平均气温数据。本次用2020年逐月平均气温数据操作说明。 一、准备工作 (1)准备Arcmap桌面软件; (2)准备2020年逐月平均气温数据(NC格式)、范围图层数据&…