面试题更新之-vue2x监听方面有什么缺点?所以才有了vue3.0

在这里插入图片描述

文章目录

  • vue2x监听
  • vue3.0监听
  • vue2x监听方面有什么缺点?所以才有了vue3.0


vue2x监听

在Vue.js 2.x中,你可以通过监听属性来响应数据的变化。以下是几种常见的监听方式:

  1. 监听计算属性:你可以使用computed属性来创建一个计算属性,并监听它的变化。
computed: {fullName() {return this.firstName + ' ' + this.lastName;}
},
watch: {fullName(newVal, oldVal) {console.log('fullName发生了变化', newVal, oldVal);}
}

在上面的代码中,fullName是一个计算属性。当firstName或lastName发生变化时,fullName会重新计算,然后watch会监听fullName的变化,并执行相应的回调函数。

  1. 监听对象:你可以使用$watch方法来监听对象的变化。
data() {return {user: {name: 'John',age: 30}};
},
created() {this.$watch('user', (newVal, oldVal) => {console.log('user对象发生了变化', newVal, oldVal);}, { deep: true });
}

在上面的代码中,通过$watch方法监听user对象的变化。{ deep: true }选项用于深度监听对象的属性变化。

  1. 监听数组:你可以使用$watch方法监听数组的变化。
data() {return {items: ['apple', 'banana', 'orange']};
},
mounted() {this.$watch('items', (newVal, oldVal) => {console.log('items数组发生了变化', newVal, oldVal);}, { deep: true });
}

在上面的代码中,通过$watch方法监听items数组的变化。同样,{ deep: true }选项用于深度监听数组内部元素的变化。

这些是Vue.js 2.x中常见的属性监听方式。通过监听属性的变化,你可以执行相应的操作来响应数据的更新。

vue3.0监听

在Vue 3.0中,监听数据变化的方式有所改变。Vue 3.0使用了基于Proxy的响应式系统来替代了Vue 2.x中基于Object.defineProperty的方式。以下是Vue 3.0中的监听方式:

  1. 响应式数据变化的监听:
    Vue 3.0通过reactive函数将一个普通对象转换为响应式对象,并可以使用ref函数将基本类型数据(如数字、字符串)转换为响应式对象。然后可以使用watch函数来监听响应式数据的变化。
import { reactive, ref, watch } from 'vue';const data = reactive({name: 'John',age: 30
});const count = ref(0);watch(() => {console.log('name:', data.name);
}, { immediate: true });watch(count, (newVal, oldVal) => {console.log('count:', newVal, oldVal);
});

在上面的代码中,data是一个响应式对象,通过watch函数可以监听data.name的变化。count是一个响应式引用,通过watch函数可以监听count的变化。

  1. 数组和Map的监听:
    Vue 3.0中也支持对数组和Map的变化进行监听,通过watch函数的deep选项来实现深度监听。
import { reactive, watch } from 'vue';const list = reactive(['apple', 'banana', 'orange']);watch(() => {console.log('list:', list);
}, { deep: true });

在上面的代码中,通过watch函数监听数组list的变化,并使用deep: true选项来进行深度监听。

  1. 计算属性的监听:
    Vue 3.0中的计算属性通过computed函数来创建,并可以使用watch函数来监听计算属性的变化。
import { computed, watch } from 'vue';const firstName = ref('John');
const lastName = ref('Doe');const fullName = computed(() => {return firstName.value + ' ' + lastName.value;
});watch(fullName, (newVal, oldVal) => {console.log('fullName:', newVal, oldVal);
});

在上面的代码中,通过computed函数创建了一个计算属性fullName,并通过watch函数监听fullName的变化。

通过以上方式,你可以在Vue 3.0中监听数据的变化并执行相应的操作。新的响应式系统在性能和灵活性方面有所提升,使开发更加便捷。

vue2x监听方面有什么缺点?所以才有了vue3.0

在Vue 2.x中,监听数据变化主要使用了Object.defineProperty来实现。但是这种方式存在一些缺点,这也是为什么在Vue 3.0中进行了改进的原因之一:

  1. 需要深度递归:Vue 2.x对于响应式数据的监听是在初始化时进行的,需要对整个数据对象进行递归遍历,将每个属性都转为getter和setter。对于大型的对象或嵌套层级较深的对象,这会导致初始化时的性能开销较大。

  2. 难以检测新增属性和删除属性:Vue 2.x通过Object.defineProperty监听属性的读取和修改,但是对于新增属性和删除属性无法直接检测到。需要通过其他手段,例如Vue.set 和 Vue.delete 方法来处理。

  3. 数组监听的问题:Vue 2.x对于数组的变化无法完全捕获,只能拦截特定的数组方法(如 push、pop 等),而直接通过索引或修改 length 属性的方式无法被监听到。

  4. 精确追踪变化:Vue 2.x的监听机制只能追踪到被访问过的属性,无法追踪到动态添加的属性。这意味着在渲染过程中,如果属性未被使用,那么对该属性的修改不会触发重新渲染。

基于以上缺点,Vue 3.0引入了基于Proxy的响应式系统来替代Object.defineProperty。使用Proxy可以提供更细粒度的监听和拦截能力,解决了以上问题,并且在性能方面也有所提升。Vue 3.0中的响应式系统更加灵活、高效和易用,提供了更好的开发体验。

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

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

相关文章

排序算法第二辑——选择排序

一,选择排序 选择排序算是简单排序中的渣渣,这种算法基本上是没有什么用处的。但是作为一个初学者,我又必须要会写这种算法。这种算法的实现实现思想和它的名字一样,就是在一个范围内选择最大或者最小的数据然后再交换数据实现排序…

Maynor的博客专家成长之路——暨2023年中复盘

文章目录 博客专家成长之路——暨2023年中复盘前言念念不忘的博客专家每天只做三件事敲代码写博客健健身 我的感悟 不足之处未来:和CSDN共同成长最后 博客专家成长之路——暨2023年中复盘 前言 ​ 2023年不知不觉已经过去了半年有余,也是时候作年中复盘…

10.25UEC++/小试牛刀(笨鸟先飞案例)

1.思路整理: 如何入手? 角色可能是每个游戏的最重要的部分,所以一般可以先从角色入手,如果游戏很复杂,可以进行拆分设计。 蓝图创建地图: 创建默认Pawn: 编写GameMode默认构造函数:…

Springboot整合Activiti详解

文章目录 版本依赖配置文件需要注意的问题画流程图activiti服务类进行编写流程部署流程定义启动流程流程实例 测试流程启动流程完成任务受理任务 版本依赖 开发工具 IDEASpringBoot 2.4.5(这里我试过SpringBoot 3.1.1版本,Activiti没有启动,…

Nginx-负载均衡

文章目录 nginx 负载均衡负载均衡策略(方法、算法)nginx配置round-robin加权轮询least-connectedip-hasp使用Https realip后端real server不使用realip模块后端real server使用realip模块 ab压力测试不同负载四层负载 7层负载4层和7层 nginx 负载均衡 负…

银河麒麟系统无法进入桌面拷贝备份文件

最近使用VMWare搭建银河麒麟系统升级后,无法进入桌面,而是进入tty1界面 这个时候如何想导出里面的文件就可以用文件共享的方式右键到虚拟机设置-选项,如图所示 选择一个共享目录 如d盘vm目录 登录tty1账号密码 ls列出文件 如图进行文件拷贝…

如何优雅的将 Docker 镜像从 1.43G 瘦身到 22.4MB

Docker 镜像的大小对于系统的 CI/CD 等都有影响,尤其是云部署场景。我们在生产实践中都会做瘦身的操作,尽最大的可能使用 Size 小的镜像完成功能。下文是一个简单的 ReactJS 程序上线的瘦身体验,希望可以帮助大家找到镜像瘦身的方向和灵感。 …

Python 列表 extend()函数使用详解

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 extend函数使用详解 1、可以接收的参数1.1、添加字符串1.2、添加元组1.3、添加字…

【动手学深度学习】pytorch-参数管理

pytorch-参数管理 概述 我们的目标是找到使损失函数最小化的模型参数值。 经过训练后,我们将需要使用这些参数来做出未来的预测。 此外,有时我们希望提取参数,以便在其他环境中复用它们, 将模型保存下来,以便它可以在…

【USRP X410】LabVIEW参考架构软件,用于使用Ettus USRP X410对无线系统进行原型验证

LabVIEW参考架构软件,用于使用Ettus USRP X410对无线系统进行原型验证 设备 1 MHz to 7.2 GHz,400 MHz带宽,GPS驯服OCXO,USRP软件无线电设备 - Ettus USRP X410集成硬件和软件,可帮助您制作高性能无线系统的原型&…

500万PV的网站需要多少台服务器?

1. 衡量业务量的指标 衡量业务量的指标项有很多,比如,常见Web类应用中的PV、UV、IP。而比较贴近业务的指标项就是大家通常所说的业务用户数。但这个用户数比较笼统,其实和真实访问量有比较大的差距,所以为了更贴近实际业务量及压力…

Django_使用redis缓存数据

目录 一、配置redis 二、缓存Django的默认session 三、使用django的缓存机制缓存数据 四、自定义缓存数据 源码等资料获取方法 一、配置redis 在settings中添加配置参数 # Django的缓存配置 CACHES {"default": {"BACKEND": "django_redis.ca…

【网站开发】jq (jquery)实现瀑布流布局

要实现网站瀑布流效果&#xff0c;可以使用HTML、CSS和jquery来完成。下面是一种常见的实现方式&#xff1a; 注意要引入jQuery库。 代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title>…

【Unity面试篇】Unity 面试题总结甄选 |Unity进阶篇 | ❤️持续更新❤️

前言 关于Unity面试题相关的所有知识点&#xff1a;&#x1f431;‍&#x1f3cd;2023年Unity面试题大全&#xff0c;共十万字面试题总结【收藏一篇足够面试&#xff0c;持续更新】为了方便大家可以重点复习某个模块&#xff0c;所以将各方面的知识点进行了拆分并更新整理了新…

2023上半年工作总结

目录 一、目标达成情况总结&#xff1a; 二、工作/学习成果总结&#xff1a; 三、下半年规划总结&#xff1a; 一、目标达成情况总结&#xff1a; 其实我并没有给自己定多少目标&#xff0c;特别上长期的目标很少制定&#xff0c;总体来说2023年上班过的很平淡&#xff0c;波…

【Spring Boot】Spring Boot日志详情:基于lombok的日志输出

文章目录 1. 何为日志文件&#xff1f;2. 日志文件的作用3. 日志文件的基本使用3.1 Spring Boot中的日志3.2 自定义日志打印 4 日志级别4.1 日志级别的作用4.2 日志级别的分类4.3 日志级别的设置 5 日志持久化6 基于lombok的日志输出6.1 lombok 简单输出日志案例6.2 浅谈 lombo…

基于单片机空气质量检测二氧化碳 一氧化碳温湿度PM2.5检测系统的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;对空气空气中有毒有害气体进行监测&#xff1b;使用LCD1602液晶显示&#xff0c;采集到的PM2.5值通过单片机串口传输&#xff1b;通过传感器对室内PM2.5粉尘进行检查&#xff1b;通过按键设置的上限值&#xff1b;当检测到有毒气体…

SpringBoot2+Vue2实战(十八)修改密码

一、修改密码&#xff1a; Header.vue <el-dropdown-item style"font-size: 14px; padding: 5px 0"><router-link to"/password" style"text-decoration: none">修改密码</router-link></el-dropdown-item> router/i…

【网络】socket——预备知识 | 套接字 | UDP网络通信

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《网络》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 在前面本喵对网络的整体轮廓做了一个大概的介绍&#xff0c;比如分层&#xff0c;协议等等内容&#x…

Unity 之 超级详细的隐私问题解决方案

Unity 之 助力游戏增长 -- 解决隐私问题 一&#xff0c;平台测试隐私问题二&#xff0c;解决方式一2.1 勾选自定义Mainifest2.2 修改自定义Mainifest2.3 隐私协议弹窗逻辑 三&#xff0c;解决方式二3.1 导出安卓工程3.2 创建上层Activity3.3 配置AndroidManifest 四&#xff0…