vue3相比vue2的优点

一、响应式:

(1)vue2:内置的Object.defineProperty将data中的数据转化成响应式数据的,它会将data中的每个属性都转换为具有getter和setter的响应式属性

Object.defineProperty是一个内置的方法,它用于定义或修改对象的属性特性。

在Vue2中,通过使用Object.defineProperty方法,可以将data对象中的属性转换为具有getter和setter的响应式属性。getter和setter是属性的访问器函数,用于获取和设置属性的值。

具体来说,getter用于获取属性的值,setter用于设置属性的值。当属性被访问时,getter函数会被调用,当属性被修改时,setter函数会被调用。通过在getter和setter函数中进行依赖追踪和触发更新,Vue能够实现响应式数据。

明显缺点:每个data属性都被定义了getter和setter导致产生了大量的getter和setter,影响性能

(2)vue3:引入Proxy拦截==>通过以下两点实现

                        ref将值包装成响应式(比如常见的布尔值)

                        reactive将对象包装成响应式的

        vue3利用Proxy在ref和reactive内部创建了一个代理对象

        实现了对属性和访问的修改拦截,从而实现响应式效果

需要注意的是,这里的Proxy不是指代理服务器,而是指ES6中的Proxy对象,用于实现拦截和代理目标对象操作的功能。

明显优点:Proxy拦截器方法只有在需要时才被调用,这意味着只有在访问或修改被代理对象的属性时才会触发相应的拦截器方法。这样可以提升性能,避免不必要的操作和触发。

二、数据共享:vue2:mixins;vue3:hooks

三、属性方法:

                        vue2:computed和watch都是属性

                        vue3:computed和watch都是方法

在Vue 3中,computed和watch被更改为方法的好处是:

  1. 更加灵活:以前的computed属性和watch属性是在选项对象中定义的,而现在的computed方法和watch方法可以在组件的任何地方定义,使得代码更加灵活。

  2. 更好的类型推断:在Vue 2中,computed和watch属性的类型推断有时不够准确,而在Vue 3中,computed方法和watch方法的类型推断更加准确。这是因为方法的参数和返回值可以更直接地反映它们的实际类型。

  3. 更好的代码组织:将computed和watch作为方法定义,使得代码结构更加清晰。开发者可以将它们放置在组件内部的任何位置,根据逻辑组织代码,而不再被限制在选项对象中。

  4. 更好的性能:在Vue 2中,computed属性和watch属性会在组件实例化时被计算和观察,即使它们没有被使用。而在Vue 3中,computed方法和watch方法只有在被调用时才会执行,提升了性能。 

 四、vue3新增的composition API

除ref、reactive、toRefs、computed、watch外

还有useStore:在组件中访问Vuex store的实例

       useRouter:在组件中访问Vue Router的实例

       useRoute:在组件中访问当前路由的信息

(1)useStore:可以通过import {useStore} from "vuex"

                                   然后const store = useStore()

                                   就可以直接通过store.的方式访问vuex中的内容了

        而在vue2中:需要使用this.$store来访问vuex

在Vue 2中,需要通过Vue实例的this.$store来访问Vuex的内容,而在Vue 3中可以直接通过useStore函数获取store实例,无需依赖Vue实例。Vue3更加灵活方便

(2)useRouter和useRoute同理

这些新增的函数在Vue 3中提供了更加直接、简洁的方式来访问Vue Router的实例和当前路由的信息,使得代码更加清晰易读

五、Proxy相比Object.defineProperty具有更强大的拦截能力

(1)在Vue 2中,响应式数据是通过Object.defineProperty来实现的。这个方法可以将一个属性定义为getter和setter,从而在属性被读取和修改时触发相应的操作。但是,它无法直接拦截属性的添加和删除操作。

举个例子来说明:

// Vue 2
var data = { name: 'Fengfeng' };Object.defineProperty(data, 'age', {get() {console.log('age被读取');return 18;},set(newValue) {console.log('age被修改为', newValue);}
});console.log(data.age); // 输出:age被读取,18
data.age = 20; // 输出:age被修改为 20

在这个例子中,我们通过Object.defineProperty定义了一个名为age的属性,当我们读取或修改age属性时,会触发相应的操作。

然而,如果我们尝试添加或删除age属性,将不会触发任何操作:

data.age = 20;
console.log(data.age); // 输出:18,age并没有被修改为20delete data.age;
console.log(data.age); // 输出:18,age并没有被删除

相比之下,Vue 3使用了Proxy拦截器来实现响应式。Proxy拦截器可以拦截对象的所有操作,包括属性的读取、修改、添加和删除。这使得Vue 3可以提供更强大的响应式能力。

(2)下面是使用Proxy拦截器实现响应式的例子:

// Vue 3
var data = new Proxy({ name: 'Fengfeng' }, {get(target, key) {console.log(key, '被读取');return target[key];},set(target, key, value) {console.log(key, '被修改为', value);target[key] = value;},deleteProperty(target, key) {console.log(key, '被删除');delete target[key];}
});console.log(data.age); // 输出:age 被读取,undefined
data.age = 18; // 输出:age 被修改为 18
console.log(data.age); // 输出:age 被读取,18delete data.age; // 输出:age 被删除
console.log(data.age); // 输出:age 被读取,undefined

在这个例子中,我们使用Proxy来创建一个代理对象,在代理对象上定义了get、set和deleteProperty方法来拦截属性的读取、修改和删除操作。当我们读取、修改或删除age属性时,会触发相应的操作。

所以,Vue 3相比Vue 2具有更强大的拦截能力,可以通过Proxy拦截器实现属性的添加和删除操作的拦截。

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

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

相关文章

钡铼BL302与PLC:提升酿酒业效率与品质的利器

啤酒是人类非常古老的酒精饮料,是水和茶之后世界上消耗量排名第三的饮料。 啤酒在生产过程中主要有制造麦芽、粉碎原料、糖化、发酵、贮酒後熟、过滤、灌装包装等工序流程。需要用到风选机、筛分机、糖化锅、发酵设备、过滤机、灌装机、包装机等食品机械设备。这些食…

指针笔试题详解

个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.前言 2.指针题写出下列程序的结…

【算法练习Day1】二分查找移除元素

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 二分查找解决方法一&…

在比特币上使用可检索性证明支付存储费用

我们为用户开发了一种为云存储付费的新方法。 与亚马逊的 S3 等传统云存储相比,用户不必信任服务器。 我们使用比特币智能合约来确保支付取决于服务器的可检索性证明 (PoR),该证明只能在数据仍然可用且需要时可以检索的情况下生成。 可检索性证明 (PoR)…

C/C++学习路线总结与分享

目录 1、学习C语言 2、学习C 3、了解基础的网络知识 4、Linux相关知识 5、数据库知识 6、数据结构与算法 7、需要重点关注的编程技术 7.1、socket网络编程 7.2、多线程与多线程编程 7.3、多进程及多进程通信 7.4、动态链接库编程 7.5、数据库编程 7.6、设计模式 …

Super Marker插件——标记资源,提高效率

插件介绍: 这是一款可以给资源添加颜色或图标标记📌的插件,当资源文件比较多的时候,颜色标记可以让你一眼定位到要使用的资源,提高开发效率。 插件地址: Cocos商店:https://store.cocos.com/a…

机器学习,深度学习

一 、Numpy 1.1 安装numpy 2.2 Numpy操作数组 jupyter扩展插件(用于显示目录) 1、pip install jupyter_contrib_nbextensions -i https://pypi.tuna.tsinghua.edu.cn/simple 2、pip install jupyter_nbextensions_configurator -i https://pypi.tuna.t…

c#:System.Text.Json 的使用三(从Newtonsoft迁移)

环境: .net 6.0vs2022 系列篇: 《c#:System.Text.Json 的使用一》 《c#:System.Text.Json 的使用二》 《c#:System.Text.Json 的使用三(从Newtonsoft迁移)》 参考: 《MSDN: 从 Newt…

Kafka 常见问题

文章目录 kafka 如何确保消息的可靠性传输Kafka 高性能的体现利用Partition实现并行处理利用PageCache 如何提高 Kafka 性能调整内核参数来优化IO性能减少网络开销批处理数据压缩降低网络负载高效的序列化方式 kafka 如何确保消息的可靠性传输 消费端弄丢了数据 唯一可能导致…

python抓取网页视频

1. 喜马拉雅音频 1-1 喜马拉雅 import requests import json import time import random import hashliburl https://www.ximalaya.com/revision/play/v1/audio?id46103875&ptype1headers { user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.3…

小黑下班品尝网红团结湖四川麻辣烫,吃的特别撑,支付宝抽到3元红包,耳机找到,开始接触强化学习的leetcode之旅:LCR 188. 买卖芯片的最佳时机

小黑代码 class Solution:def bestTiming(self, prices: List[int]) -> int:# 数组长度n len(prices)if n < 2:return 0# 结果变量profit 0# 记录第i天之前的股票价格最小值min_ prices[0]for i in range(1, n):if prices[i]-min_ > profit:profit prices[i]-min…

品牌出海的关键步骤:市场定位与创新营销

现如今越来越多的企业开始将目光投向海外市场&#xff0c;寻求品牌出海的机会。品牌出海是指企业将自身品牌拓展至海外市场&#xff0c;通过进军国际市场来实现增长和发展。然而&#xff0c;面对不同的文化、市场环境和消费者需求&#xff0c;成功的品牌出海需要制定有效的策略…

手撸RPC【gw-rpc】

文章目录 基于 Netty 的简易版 RPC需求分析简易RPC框架的整体实现协议模块 &#x1f4d6;自定义协议 &#x1f195;序列化方式 &#x1f522; 服务工厂 &#x1f3ed;服务调用方 ❓前置知识——动态代理&#x1f573;️Proxy类InvocationHandler 接口 RPC服务代理类内嵌Netty客…

印章篆刻小程序商城的作用是什么

印章的需求度也有很高市场需求&#xff0c;处理办公印章外&#xff0c;还有艺术类的&#xff0c;而对爱好者来说&#xff0c;需要找到一家靠谱的品牌制作&#xff0c;包括材料、样式、内容等都有较高要求&#xff0c;线上可以接触到更多雕刻商家。 而对品牌来说&#xff0c;需…

无线振弦采集仪在岩土工程安全监测中优化成本支出

无线振弦采集仪在岩土工程安全监测中优化成本支出 随着城市的快速发展以及建筑业的不断壮大&#xff0c;岩土工程的安全监测变得越来越重要。在岩土工程中&#xff0c;振弦是一种重要的监测手段&#xff0c;可以有效地评估土体的力学性质和变形情况。因此&#xff0c;无线振弦…

基于ModebusRTU通信采集温度湿度项目案例

目录 一、模拟温湿度模拟 【1.1】温湿度仪表参数 【1.1】使用电脑模拟传感器 【1.2】使用Codesys软件模拟传感器 二、自定义控件UI设计 【2.1】自定义控件温度湿度柱状设计 ​编辑 【2.1.1】设置温度湿度柱状实际显示【属性】 【2.1.2】设置温度湿度柱状的背景颜色【属…

MacOS上的Pip和Python升级指南

在MacOS系统上&#xff0c;保持Pip和Python版本的最新状态对于顺利进行Python开发至关重要。通过升级Pip和Python&#xff0c;你可以享受到最新的功能、修复的bug以及提升的开发效率。本文将为你提供在MacOS上升级Pip和Python的详细指南&#xff0c;助你打造更强大的开发环境。…

基于jenkins+k8s实现devops

1、背景 由于jenkins运行在k8s上能够更好的利用动态agent进行构建。所以写了个部署教程&#xff0c;亲测无坑 2、部署 1、创建ns kubectl create namespace devops 2、kubectl apply -f jenkins.yml apiVersion: v1 kind: ServiceAccount metadata:name: jenkinsnamespace…

一键生成,轻松制作个性化瓜分红包活动二维码

在如今竞争激烈的市场中&#xff0c;营销活动成为各个品牌推广的重要手段。而在朋友圈这个信息交流的平台上&#xff0c;如何引起用户的关注和参与&#xff0c;成为了每个营销人员的关注焦点。而打造一个引爆朋友圈的瓜分红包活动&#xff0c;无疑是一种非常有效的方法。接下来…

【C++杂货店】类和对象(上)

【C杂货店】类和对象&#xff08;上&#xff09; 一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1 访问限定符4.2 封装 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储规则7.2 例题7.3结构体内存对齐规则 八、this指针8.2 t…