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

news2025/1/11 17:43:51

在这里插入图片描述

文章目录

  • 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.coloradmin.cn/o/753725.html

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

相关文章

Windows下编译安装ARPACK

ARPACK采用Arnoldi算法求解大型稀疏矩阵特征值。本文拟记录在Windows下编译安装ARPACK的流程。 零、环境 操作系统Windows 10集成开发环境Visual Studio 2019 CommunityCMake3.24.2Intel oneAPI BaseKit w_BaseKit_p_2023.1.0.47256_offline Intel oneAPI HPCKitw_HPCKit_p…

亮相亚太 CDN 峰会,火山引擎 CDN 与加速助力数字化业务加速发展

6月28日- 6月29日,2023 全球分布式云大会和第十二届亚太内容分发大会暨 CDN 峰会在北京成功举办。火山引擎凭借在边缘云领域持续的技术积累、丰富的场景应用、创新的产品与解决方案,荣登“分布式云与算力创新企业榜单”,“中国边缘加速创新企…

通过一个C语言程序的生命周期,了解计算机系统

我们通过跟踪这个hello程序来系统性的了解一个程序是如何被系统执行的。 #include <stdio.h>int main(){printf("hello world"); }一、信息的本质 一个C语言程序的生命周期从一个源程序开始&#xff0c;程序员用编辑器创建并保存的文本文件&#xff0c;文件后…

【Pycharm中快速校准代码格式】

Windows下&#xff1a; ctrlaltL Mac下&#xff1a; optioncommand 如何查看Pycharm的快捷键 keymap 键映射&#xff1a;计算机软件中&#xff0c;将键盘按键与特定功能或命令关联的配置。

scrapy ---分布式爬虫

导模块 pip install scrapy-redis 原来scrapy的Scheduler维护的是本机的任务队列&#xff08;待爬取的地址&#xff09;本机的去重队列&#xff08;放在集合中&#xff09;---》在本机内存中 如果把scrapy项目&#xff0c;部署到多台机器上&#xff0c;多台机器爬取的内容是重…

特斯拉上海工厂二季度交付创历史新高,员工奖金大幅增长

根据路透社的报道&#xff0c;特斯拉上海工厂的几位员工透露&#xff0c;他们在最新一季度获得了大幅增加的绩效奖金。 根据三位工厂员工的陈述&#xff0c;他们在二季度收到的奖金是他们月薪的1.5倍&#xff0c;高于之前按绩效评估获得的季度奖金&#xff08;月薪的1.2倍&…

《面试1v1》Kafka基础

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

Nacos 虚拟机设置开机自启

执行命令 : vi /lib/systemd/system/nacos.service 创建并编辑文件将下面的代码放入此文件中,其中注意自己nacos的位置,即ExecStart与ExecReload与ExecStop 后面的nacos相关路径 [Unit] Descriptionnacos Afternetwork.target[Service] Typeforking TimeoutSec0 #防止启动超时…

呼吸灯——FPGA

文章目录 前言一、呼吸灯是什么&#xff1f;1、介绍2、占空比调节示意图 二、系统设计1、系统框图2、RTL视图 三、源码四、效果五、总结六、参考资料 前言 环境&#xff1a; 1、Quartus18.0 2、vscode 3、板子型号&#xff1a;EP4CE6F17C8 要求&#xff1a; 将四个LED灯实现循环…

我伴随HarmonyOS一起成长

大家好&#xff0c;我是waylau&#xff08;老卫&#xff09;&#xff0c;是一名80后程序员&#xff0c;华为开发者联盟社区认证讲师&#xff0c;HarmonyOS技术达人&#xff0c;曾获2021、2022年度牛人之星、2022年度OpenHarmony开源贡献之星。著有《跟老卫学HarmonyOS开发》开源…

jmeter 入门到精通

目录 一、jmeter 安装 二、jmeter 介绍 1、jmeter是什么&#xff1f; 2、jmeter 用来做什么&#xff1f; 3、优点 4、缺点 5、jmeter 目录介绍 ①_bin 目录介绍 ② docs 目录 — — 接口文档目录 ③ extras目录 — — 扩展插件目录 ④ lib 目录 — — 所用到的插件…

网络通信原理系统的认知(NEBASE第十四课)

1 物理层 第一层 物理层&#xff1a;建立、维护、断开物理连接&#xff0c;定义了接口及介质&#xff0c;实现了比特流的传输。 1.1传输层介质分类 有线介质&#xff1a;网线 &#xff08;双绞线&#xff09;光纤 无线: 无线电 1.2 双绞线 五类线 cat5 &#xff1a;适用 10…

[论文分享]ConvMAE:Masked Convolution Meets Masked Autoencoders

论文题目&#xff1a;ConvMAE: Masked Convolution Meets Masked Autoencoders 论文地址&#xff1a;https://arxiv.org/abs/2205.03892 代码地址&#xff1a;https://github.com/Alpha-VL/ConvMAE 摘要 视觉变压器(Vision transformer, ViT)已成为广泛应用于各种视觉任务的架…

如何使用 SVG 作为占位符和其他图像加载技术

从图像生成 SVG 可用于占位符。 一、说明 我们对图像性能优化和使图像在网络上快速加载充满热情。最有趣的探索领域之一是占位符&#xff1a;当图像尚未加载时要显示的内容。 在过去&#xff0c;我遇到了一些使用 SVG 的加载技术&#xff0c;我想在这篇文章中描述它们。 在这…

代码随想录算法训练营第52天 | 动态规划 part13 ● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组

#300.最长递增子序列 自己想了20min没想出来。但没关系因为没接触过该题型。我想不出来的点就是&#xff0c;如果i-1的最后一个不要的话&#xff0c;我怎么找到上一个结束点。解决方案是&#xff1a;再搞一个循环&#xff0c;一个个找&#xff08;下面的 j &#xff09; 下面…

性能测试 Linux 环境下模拟延时和丢包实现

在性能测试过程中&#xff0c;我们还需要模拟网络异常的情况下&#xff0c;是否会出现一些异常数据。最常见的就是写库操作&#xff0c;比如说我们下单的场景&#xff0c;如果出现网络异常的时候是否会出现数据对不上这种情况。 如我们JMeter发送成功的请求数量和最终数据库表…

龙蜥白皮书精选:面向 HTTP 3.0 时代的高性能网络协议栈

文/高性能网络 SIG 01 背景概述 随着互联网特别是移动互联网的快速发展&#xff0c;对互联网通信协议提出了新的诉求。经过多年的发展&#xff0c;QUIC 协议在 2021 年正式被 IEFT 标准化&#xff0c;成为 HTTP 3 的标准传输层协议。QUIC 是基于 UDP 实现的面向连接可靠有序…

基于虚拟同步发电机控制的双机并联MATLAB仿真模型

使用MATLAB2021b打开 主要内容&#xff1a; 功率计算模块、虚拟同步发电机控制模块、电压合成模块、电压电流双环控制模块&#xff01; 1.两台VSG并联&#xff0c;开始各自带负载10KW&#xff0c;在0.3秒的时候加入公共负载10KW&#xff0c;稳定后两台VSG可以均分公共负载的…

大模型时代Embedding技术简介

Embeddings技术简介及其历史概要 在机器学习和自然语言处理中&#xff0c;embedding是指将高维度的数据&#xff08;例如文字、图片、音频&#xff09;映射到低维度空间的过程。embedding向量通常是一个由实数构成的向量&#xff0c;它将输入的数据表示成一个连续的数值空间中…

SciencePub学术 | 区块链类重点SCIEEI征稿中

SciencePub学术 刊源推荐: 区块链类重点SCIE&EI征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; SCI-01 【期刊简介】IF&#xff1a;4.0-4.5&#xff0c;JCR2区&#xff0c;中科院3区&#xff1b; 【检索情况】SCIE&EI双检&…