揭开Vue的响应式秘密:深入剖析Vue2与Vue3的差异与革新

news/2024/7/9 23:42:42 标签: javascript, typescript, vue, vue.js

针对Vue2和Vue3的响应式原理做个简单的介绍整理,可以加深对其认知也可以应付简单的面试问题。

Vue2

1.实现原理

通过Object.defineProperty遍历data选项的所有属性,把每一个属性变成对应的getter和setter函数,读取某个属性的时候调用对应的getter函数,更新某个属性的时候调用对应的setter函数。

通俗易懂的来说就是:
对象类型:通过Object.defineProperty()对属性的读取、修改进行拦截,也就是我们通常所说的数据劫持。
数组类型:通过重写和更新数组的一系列方法来实现拦截即数据劫持,也就是对数组原始的变更方法进行了封装。

2.存在问题

对象类型:新增属性和删除属性时虽然响应式数据发生变化但是界面不会更新。
数组类型:直接通过下标修改数组数据时虽然响应式数据发生变化但是界面不会更新。

3.核心代码

Object.defineProperty(data, 'item', {
get() {},
set() {}
})

Vue3

1.实现原理

由于vue2的Object.defineProperty有局限性,所以vue3采用了ES6的新特性Proxy和Reflect对象来实现,Proxy对象用于定义基本操作的自定义行为(如属性查找、赋值、枚举、函数调用等)。Reflect是一个内置对象,其原型是Object.prototype。它不是一个函数,不能进行函数调用和构造函数调用。Reflect对象的方法和Proxy对象的方法一一对应,只要是Proxy对象的方法,都能在Reflect对象上找到对应的方法。这就让Proxy对象可以方便地调用对应的Reflect方法完成默认行为。

通俗易懂的来说就是:
通过Proxy(代理):拦截对象中任意属性的读写、添加、删除的变化。
通过Reflect(反射):对被代理对象的属性进行更新操作。
Proxy相当于一个拦截器,对数据的增删改时都能被拦截到,然后通过Reflect来进行反射对源对象的属性进行更新,需要Proxy和Reflect配合使用从而达到预期效果。

2.核心代码

new Proxy(data, {
// 拦截读取属性
get(target, prop) {
return Reflect.get(target, prop)
},
// 拦截添加、设置属性
set(target, prop, value) {
return Reflect.set(target, prop, value)
},
// 拦截删除属性
deleteProperty(target, prop) {
return Reflect.deleteProperty(target, prop)
}
})


http://www.niftyadmin.cn/n/5088603.html

相关文章

多线程并发篇---第十篇

系列文章目录 文章目录 系列文章目录一、Java线程池中队列常用类型有哪些?二、线程安全需要保证几个基本特征?三、说一下线程之间是如何通信的?一、Java线程池中队列常用类型有哪些? ArrayBlockingQueue 是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则…

倒置边框半径卡片

效果展示 CSS 知识点 实现多曲面的思路 实现整体布局 <div class"card"><div class"img_box"></div><div class"content"><div class"price"></div></div> </div>.card {position…

Oracle与Mysql语法区别

database 一、数据类型二、update..select语句三、upsert语句四、常见函数五、自动更新列时间戳一、数据类型 OracleMysqlnumberint/decimal变长字符:varchar2varchardatedatetime/timestampinttinyint/smallint/mediumint/int/bigint二、update…select语句 Oracle update t…

CICD:github actions 实现CICD

持续集成解决什么问题 提高软件质量效率迭代便捷部署快速交付、便于管理 持续集成&#xff08;CI&#xff09; 集成&#xff0c;就是一些孤立的事物或元素通过某种方式集中在一起&#xff0c;产生联系&#xff0c;从而构建一个有机整体的过程。 持续&#xff0c;就是指长期…

人机交互中的信息数量与信息质量

在人机交互中&#xff0c;信息数量和信息质量是影响人机交互效果的两个重要因素。信息数量指的是系统向用户提供的信息总量&#xff0c;包括输入信息、反馈信息、展示信息、错误信息等&#xff0c;在合适的情况下越少越好&#xff1b;信息质量则是指信息的准确性、有效性、清晰…

Spring Boot关掉APR

在Spring Boot中&#xff0c;可以通过设置环境变量或配置文件来关闭APR&#xff08;Apache Portable Runtime&#xff09;。下面是两种常用的方法&#xff1a; 方法一&#xff1a;设置环境变量 在启动Spring Boot应用程序时&#xff0c;可以通过设置-DuseApr环境变量来控制是…

Yarn基础入门

文章目录 一、Yarn资源调度器1、架构2、Yarn工作机制3、HDFS、YARN、MR关系4、作业提交之HDFS&MapReduce 二、Yarn调度器和调度算法1、先进先出调度器&#xff08;FIFO&#xff09;2、容量调度器&#xff08;Capacity Scheduler&#xff09;3、公平调度器&#xff08;Fair …

Windows 10 用 Hyper-V 安装 Ubuntu

0、快速创建&#xff08;已启用Hyper-V&#xff09; &#xff08;默认安装路径&#xff1a;C:\Users\Public\Documents\Hyper-V\Virtual hard disks&#xff09; 可通过设置更改&#xff1a; 安装操作系统 1、启用 Windows 功能&#xff1a;Hyper-V 然后重启电脑 2、搜索 …