当前位置: 首页 > news >正文

【前端基础知识】Vue中的变量不是响应式的吗?属性赋值后视图不变化的原因是什么?

在这里插入图片描述

目录

  • 🤔问题
  • 📝回答
  • 🎨使用场景
      • 动态添加属性
      • 动态添加数组元素
  • ❌注意事项
      • $set只能在响应式对象上使用
      • $set不能用于根级别的属性
      • $set的性能问题
  • 📄总结

🤔问题

Vue是一款在国内非常流行的框架,采用MVVM架构,它提供了一种响应式的数据双向绑定机制,使得开发者可以更方便地管理模型和视图。但是在Vue2中,由于使用了Object.defineProperty来追踪属性变化,但是它只能追踪已经存在的属性,无法追踪动态添加的属性,导致我们动态添加了属性后视图也无法更新。这个时候就需要$set的帮助了。

注:Vue3使用的是Proxy去监听属性变化,所以不会有这个问题。但是为了保持向后兼容性,Vue3仍然保留了这个方法,可以使用,但已经不是必需的!

📝回答

$set是Vue提供的一个全局方法,它的作用是在响应式对象上添加一个属性,并确保这个属性是响应式的。这意味着,当这个属性的值发生变化时,Vue会自动更新视图。

$set方法的语法如下:

/**object*///this
this.$set(object, propertyName, value)//vue
Vue.set(object, propertyName, value)
/**Array*///this
this.$set(array, index, value)//vue
Vue.set(array, index, value)

其中,object是要添加属性的对象,propertyName是要添加的属性名,value是要添加的属性值。

举个🌰栗子,假设我们有一个data对象:

data: {user: {name: '张三',age: 18}
}

如果我们想要添加一个新的属性gender,我们可以使用$set方法:

Vue.set(this.user, 'gender', '男')

这样,我们就成功地向user对象中添加了一个gender属性,Vue也会自动更新视图。

🎨使用场景

需要注意的是,$set方法不仅可以用于添加或修改对象属性,而且可以用于数组,并且数组可以使用Vue提供的变异方法,如push、pop、splice等。

动态添加属性

在Vue中,如果我们想要动态地添加一个属性,我们通常会使用以下方式:

this.obj.newProp = 'new value';

但是,这种方式会导致新添加的属性不是响应式的,也就是说,当这个属性的值发生变化时,视图不会自动更新。这时,我们就需要使用$set方法来确保新添加的属性是响应式的:

this.$set(this.obj, 'newProp', 'new value');

这样,当newProp的值发生变化时,视图会自动更新。

动态添加数组元素

在Vue中,如果我们想要动态地添加一个数组元素,我们通常会使用以下方式:

this.arr.push('new item');

我们也可以使用$set方法来确保新添加的元素是响应式的:

this.$set(this.arr, this.arr.length, 'new item');

这样,当新元素被添加到数组中时,视图会自动更新。

❌注意事项

虽然$set方法可以解决动态添加属性和数组元素的问题,但是我们需要注意以下几点:

$set只能在响应式对象上使用

$set方法只能在响应式对象上使用,如果我们在非响应式对象上使用$set方法,它将不起作用。

$set不能用于根级别的属性

$set方法不能用于根级别的属性,也就是说,我们不能使用$set方法来添加或修改组件的根级别属性。如果我们需要修改根级别属性,我们应该在组件的data选项中声明这些属性。

$set的性能问题

$set方法会对性能产生一定的影响,因为它需要遍历整个对象来确保新添加的属性是响应式的。因此,我们应该尽量避免频繁地使用$set方法。

📄总结

$set方法是Vue提供的一个全局方法,它的作用是在响应式对象上添加一个属性,并确保这个属性是响应式的。$set方法的使用场景包括动态添加属性和数组元素。但是,我们需要注意$set方法只能在响应式对象上使用,不能用于根级别的属性,并且会对性能产生一定的影响。

相关文章:

【前端基础知识】Vue中的变量不是响应式的吗?属性赋值后视图不变化的原因是什么?

目录 🤔问题📝回答🎨使用场景动态添加属性动态添加数组元素 ❌注意事项$set只能在响应式对象上使用$set不能用于根级别的属性$set的性能问题 📄总结 🤔问题 Vue是一款在国内非常流行的框架,采用MVVM架构&a…...

如何完全卸载linux下通过rpm安装的mysql

卸载linux下通过rpm安装的mysql 1.关闭MySQL服务2.使用 rpm 命令的方式查看已安装的mysql3. 使用rpm -ev 命令移除安装4. 查询是否还存在遗漏文件5. 删除MySQL数据库内容 1.关闭MySQL服务 如果之前安装过并已经启动,则需要卸载前请先关闭MySQL服务 systemctl stop…...

[渗透教程]-004-长城防火墙GFW的原理

文章目录 1. baidu.com 请求过程2. GFW原理2.1 GFW拦截方法1:DNS渲染2.2 通过IP黑名单2.3 VPN阻断1. baidu.com 请求过程 家庭的路由器具备了交换机的功能.域名–>ip,优先检测本地的缓存,没有的话就查找DNS服务器,传输层对应该层的数据进行封装增加了端口的信息,网络层对传输…...

LaTeX基础文本排版命令

LaTeX基础文本排版命令 1. 字体大小2. 字体的粗体与斜体2.1. 粗体2.2 斜体2.3 同时启用粗体和斜体 3. 空格长度4. 高度与宽度尺寸 在LaTeX中,文本排版可以通过简单的命令实现,这些命令可以控制字体大小、粗体与斜体、空格、行高和宽度等方面,…...

PLC模糊控制模糊PID(梯形图实现+算法分析)

博途PLC的模糊PID控制详细内容请查看下面的博客文章: Matlab仿真+博途PLC模糊PID控制完整SCL源代码参考(带模糊和普通PID切换功能)_博途怎么实现模糊pid_RXXW_Dor的博客-CSDN博客模糊PID的其它相关数学基础,理论知识大家可以参看专栏的其它文章,这里不再赘述,本文就双容…...

线程池在Java多线程中的应用

前言 随着计算机硬件和软件技术的不断发展,多线程编程在软件开发中变得越来越常见。然而,使用多线程编程时必须小心谨慎,以确保正确性和可维护性。在这个过程中,线程池成为了一个至关重要的工具。本文将介绍其应用场景、注意事项…...

1997-2021年全国30省技术市场成交额(亿元)

1997-2021年全国30省技术市场成交额 1、时间:1997-2021年 2、范围:30省不含西藏 3、来源:国家统计J 4、指标:技术市场成交额 5、缺失情况说明:无缺失 6、指标解释及用途: 技术市场成交额是一个客观、…...

【C++】面向对象之多态

文章内的所有调试都是在vs2022下进行的, 部分小细节可能因编译器不同存在差异。 文章目录 多态的定义和实现概念引入多态的构成条件虚函数重写通过基类的指针或者引用调用虚函数 override和final 抽象类概念实现继承和接口继承 虚函数表单继承中的虚表打印虚表多继…...

卡尔曼滤波器简介——多维卡尔曼滤波

原文:多维卡尔曼滤波 (kalmanfilter.net) 目录 前言 基本背景 状态外推方程 示例 - 飞机 - 无控制输入 示例 - 带控制输入的飞机 示例 – 坠落物体 状态外推方程维度 线性时不变系统 线性动态系统建模 状态外推方程的推导 状态空间表示形式 示例 - 等速…...

如何用 GPT-4 帮你写游戏?

你知道的,GPT-4 发布了。 目前你想要用上 GPT-4,主要的渠道是 ChatGPT Plus 。作为交了订阅费的用户,你可以在对话的时候选择模型来使用。 另一种渠道,就是申请官方 API 的排队。我在申请 New Bing Chat 的时候,耐心被…...

R语言的贝叶斯时空数据模型实践技术应用

时间-空间数据(以下简称“时空数据”)是最重要的观测数据形式之一,很多科学研究的数据都以时空数据的形式得以呈现,而科学研究目的可以归结为挖掘时空数据中的规律。另一方面,贝叶斯统计学作为与传统统计学…...

Lazysysadmin靶机渗透过程

准备工作 下载好靶机到本地后 VMware导入OVA 启动靶机 扫描信息 首先扫描整个C段发现主机 进一步扫描端口 从扫描结果可知: Samba服务MySQLSSH端口网站端口 先对网站进行目录遍历 发现有wordpress网站和phpmyadmin管理系统 出现了非常多遍My name is togie.可能…...

为什么网络安全缺口很大,招聘却很少?

2020年我国网络空间安全人才数量缺口超过了140万,就业人数却只有10多万,缺口高达了93%。这里就有人会问了: 1、网络安全行业为什么这么缺人? 2、明明人才那么稀缺,为什么招聘时招安全的人员却没有那么多呢&#xff1…...

SpringBoot手册

目录 依赖管理关于各种的 start 依赖关于自动配置关于约定大于配置中的配置SpringBoot 整合 SpringMVC定制化 SpringMVC静态资源处理对上传文件的处理对异常的处理Web原生组件注入(Servlet、Filter、Listener)Interceptor 自定义拦截器DispatcherServlet…...

【Linux】如何实现单机版QQ,来看进程间通信之管道

学会了管道,就可以实现简单的qq哦~ 文章目录 前言一、匿名管道总结 前言 为什么要进行进程间通信呢?因为需要以下这些事: 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。 …...

从一到无穷大 #6 盘满排查过程

文章目录 引言df/du 原理排查思路文件系统预留空间进程占用句柄挂载覆盖 引言 核心在于执行df和du的时候发现显示的存储量完全不同,我本地系统盘有99G空间,du显示占用了45G,但是df却显示使用了99G,排查的过程本文所示。 先记录几…...

ChatGPT技术原理 第九章:数据集和训练技巧

目录 9.1 对话数据集 9.2 数据预处理 9.3 预训练技巧 9.4 微调技巧 9.5 多任务学习...

NCR被攻击后服务中断!原是BlackCat勒索软件作祟

近日,在遭到BlackCat勒索软件攻击后,NCR 的 Aloha 销售点平台出现中断。 NCR公司是全球关系管理技术解决方案领导供应商,为全球零售、金融、传讯、制造、旅游、交通及保安等客户提供服务。凭著累积多年的业界知识、专业顾问经验、专业增值应用…...

带你认识什么是BMS(电池管理系统)

文章目录 概述BMS的硬件拓扑BMS的电气架构BMS的功能BMS的总压采集(主板功能)BMS的电流采集(主板功能)BMS的电芯电压和温度采集(从板功能)BMS的SOC、SOP和SOH(ASW计算)BSM的绝缘检测B…...

安装Ubuntu22.04虚拟机的一些常见问题解决方法

文章目录 VirttalBox 开启共享剪切板文件夹、拖放的功能VirtualBox 安装 ubuntu后安装增强工具无效的解决办法解决ubuntu您没有权限查看“ 某某文件夹”的内容所需的权限linux更换源的两种方法[如何在 Ubuntu 20.04 上安装 Visual Studio Code - ](https://zhuanlan.zhihu.com/…...

银河麒麟操作系统,安装Gitlab 基于docker

不废话。直接上干货 操作系统信息 ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server release V10 (Sword) Kernel: 4.19.90-24.4.v2101.ky10.aarch64 Build: Kylin Linux Advanced Server release V10 (SP2) /(Sword)-aarch64-…...

基于Python实现个人手机定位分析

TransBigData是一个为交通时空大数据处理、分析和可视化而开发的Python包。本文就来用它实现个人手机定位分析,感兴趣的小伙伴可以了解一下 但其实交通时空大数据并不仅仅局限于交通工具产生的数据,我们的日常生活中也会产生大量的数据。比如我们的手机…...

Unity Navgation系统杂记

立即停止寻路 使用agent.isStoppedtrue,可以停止寻路,但是有很大的延迟,视觉体验很不好。 使用agent.enabledfalse,通过禁用NavMeshAgent组件的方式实现立即停止寻路。因为组件被禁用可能会产生其它问题,比如失去了Ob…...

[2021.11.9]lighteffect架构优化详细设计文档

1 lighteffect系统架构图 图1-1 整改前lighteffect系统架构图 上图为整改前lighteffect系统架构图,存在的问题如下: (1)代码bug 原因:由于系统中兼容了lighteffect和lighteffect2,写代码时只记了一个,出现代码bug。…...

经典回归算法

回归的概念 回归方程: 写成矩阵: 核心问题,构建预测函数z来映射特征矩阵x和标签y的线性关系 预测的目标值,有连续值也有离散值 连续值,就直接预测输出就行离散值,需要在输出端加一个变换函数例如。Si…...

Python两三行代码轻松批量添加~防韩还是很有必要的~

人生苦短,我用python 一直想做一个这种系列的但是因为七七八八的事情总是忘记, 今天正好有空,来开整一下~ 首先, 天冷防韩是什么梗? 【天冷防韩】 “天冷防韩”是“天冷防寒”的谐音, 不过“寒”指的…...

开心消消乐

给定一个 N 行 M 列的二维矩阵,矩阵中每个位置的数字取值为 0 或 1,矩阵示例如: 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 现需要将矩阵中所有的 1 进行反转为 0,规则如下: 当点击一个 1 时,该 1 被反转为 0&am…...

有效日志管理在软件开发和运营中的作用

作者:Luca Wintergerst, David Hope, Bahubali Shetti 当今存在的快速软件开发过程需要扩展和复杂的基础架构和应用程序组件,并且操作和开发团队的工作不断增长且涉及多个方面。 有助于管理和分析遥测数据的可观察性是确保应用程序和基础架构的性能和可靠…...

【五一创作】【笔记】Git|如何将仓库中所有的 commit 合成一个?又名,如何清除所有 git 提交记录?(附 git rebase 机制的简要分析)

在对代码进行开源时,我们往往并不希望代码开发过程中的提交记录被其他人看到,因为提交的过程中往往会涵盖一些敏感信息。因此会存在 将仓库中所有 commit 合成一个 的需求。 直觉上,往往会用 rebase 和 squash 或 reset,不过我尝…...

如何写出高质量代码?

作为一名资深开发人员,写出高质量的代码是我们必须要追求的目标。然而,在实际开发中,我们常常会遇到各种问题。比如,代码的可读性、可维护性、健壮性和灵活性等,这些都会影响代码的质量。那么,究竟如何才能…...

无锡网站建设公司排名/网站权重

smali语法可以参考官方说明,因为google服务器经常无法访问,这里把重要点摘抄出来。文章挺浅显的,就不翻译了 TypesMethodsAndFields Some general information about how types, methods and fields are represented in dalvik bytecode …...

问答类网站怎么做/百度怎么推广自己的作品

day02 for break 跳出循环&#xff0c;包括break后面的语句也不会再执行 // break for i : 0; i < 10; i {if i 5 {break // 跳出循环&#xff0c;包括break后面的语句也不会再执行}fmt.Println(i) } fmt.Println("overbreak")continue 当符合条件时&#x…...

东莞长安网站制作/百度seo快速见效方法

为了保护自己不被局域网中的扫描器探测到&#xff0c;我们一般会在Windows自带的防火墙中关闭icmp协议&#xff0c;这样别人就无法Ping到自己&#xff0c;但使用arp协议却可让你无处藏身。icmp工作在网络层&#xff0c;arp协议是更底层的。arp是地址转换协议&#xff0c;在局域…...

WordPress潮流媒体主题/seo优化技术招聘

Signal 顾名思义是信号的意思,为什么要用到这个东西了&#xff1f; 原因&#xff1a;由于现在在负责写网游的后台loginServer&#xff0c;里面写了不少配置文件&#xff0c;当我们的产品上线后&#xff0c;loginServer开启后这时配置文件的数据就被读取进去了&#xff0c;但是…...

网站开发的重要性/保定百度推广联系电话

概述曾经去网易面试的时候&#xff0c;面试官问了我一个问题&#xff0c;说下完订单后&#xff0c;如果用户未支付&#xff0c;需要取消订单&#xff0c;可以怎么做我当时的回答是&#xff0c;用定时任务扫描DB表即可。面试官不是很满意&#xff0c;提出&#xff1a;用定时任务…...

搜索推广 外贸/天津seo诊断技术

vue3 watch及computed的使用案例 //可以多个watch 一起使用 () => state.selectTreeList,(val) => {const treeData = _.cloneDeep(val)// 所属行业为:保理(6640),且所属地区只有省份,没有城市区县// 去...