【Vue】响应式与数据劫持

目录

前言

响应式

Vue的响应式是如何实现的

数据劫持

Vue中的data属性都具有响应式

Vue后期添加的属性如何使其具有响应式

数组的响应式处理

如何使用数组下标去修改可以具有响应式呢


前言

什么是响应式?数据劫持是什么?Vue响应式是如何实现的?

响应式

什么是响应式呢?在修改data后,页面自动改变/刷新。这就是响应式

<div class="app"><h1>{{msg}}</h1>a<input type="text" v-model="num1">b<input type="text" v-model="num2">结果:{{results()}}</div><script>const vm = new Vue({el:'.app',data:{msg:'响应式与数据劫持',num1:'',num2:''},methods:{results(){return this.num1*this.num2}}})</script>

当data中的num1和num2改变时,页面也会自动刷新改变

Vue的响应式是如何实现的

想知道Vue的响应式是如何实现的,我们先要了解一下数据劫持

数据劫持

在前面的文章中我们提到过数据代理机制,其中是使用了Object.defineProperty,其中配置了getter方法和setter方法,其中getter方法为数据代理,而我们这里要介绍的是setter方法,数据劫持。由前面可知,getter方法是当我们查看数据时触发的,而setter方法是我们修改数据时就会触发,而响应式是当data中的数据发生改变是,页面自动发生改变,所以说当我们修改属性值时,setter方法被自动调用,而setter方法不仅修改了属性值,而且还重新渲染了页面,setter方法就像半路劫持一样,所以称为数据劫持

Vue中的data属性都具有响应式

在原有的代码基础上,在data中增加一个属性a,属性a是对象,里面有属性b

 data:{msg:'响应式与数据劫持',num1:'',num2:'',a:{b:''}},

查看Vue实例可得

Vue会给data中的所有属性,以及属性中的属性,都会添加响应式

Vue后期添加的属性如何使其具有响应式

我们给属性a追加一个属性email

 vm.a.email="123456@163.com"

可以看出追加的属性是不具有响应式的

那如何使其具有响应式

Vue.set(目标对象,'属性名',值)

vm.$set(目标对象,'属性名',值)

修改上述代码

 Vue.set(vm.a,'email','123456@163.com')vm.$set(vm.a,'address','654321@163.com')

数组的响应式处理

<div class="app"><h1>{{msg}}</h1>{{arr1[0].name}}<br>{{arr1[1].name}}<br>{{arr1[2].name}}<br><br>{{arr2[0]}}<br><br>{{arr2[1]}}<br><br>{{arr2[2]}}<br><br></div><script>const vm = new Vue({el:'.app',data:{msg:'响应式与数据劫持',arr1:[{id:'1',name:'lisi',age:20},{id:'2',name:'wangwu',age:22},{id:'3',name:'zhangsan',age:23},],arr2:['1','2','3']},})</script>

使用数组下标修改属性值

可知,直接使用数组下标去修改属性值是没有响应式的

如何使用数组下标去修改可以具有响应式呢

1.

Vue.set(数组对象,'index',值)

vm.$set(数组对象,'index',值)

2.调用Vue提供的7个API

  • push()
  • pop()
  • reverse()
  • splice()
  • shift()
  • unshift()
  • sort()

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

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

相关文章

OpenCV中常用的代码

以下是一些OpenCV中常用的代码片段&#xff0c;涵盖了一些基本的图像处理和计算机视觉任务。 加载和显示图像: import cv2# 读取图像 img cv2.imread(image.jpg)# 显示图像 cv2.imshow(Image, img) cv2.waitKey(0) cv2.destroyAllWindows()调整图像大小: resized_img cv2.res…

什么是单片机?聊聊它的历史

前言 1946年2月15日&#xff0c;第一台电子数字计算机 ENIAC问世&#xff0c;这标志着计算机时代的到来。 ENIAC 是电子管计算机&#xff0c;时钟频率虽然仅有 100 kHz&#xff0c;但能在1s 的时间内完成 5000 次加法运算。与现代的计算机相比&#xff0c;ENIAC有许多不足&am…

【Dynamic-datasource】Springboot多数据源整合

引入依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version> </dependency> 整体pom文件&#xff1a; <?xml versi…

激发创新,助力研究:CogVLM,强大且开源的视觉语言模型亮相

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…

4.3 Windows驱动开发:监控进程与线程对象操作

在内核中&#xff0c;可以使用ObRegisterCallbacks这个内核回调函数来实现监控进程和线程对象操作。通过注册一个OB_CALLBACK_REGISTRATION回调结构体&#xff0c;可以指定所需的回调函数和回调的监控类型。这个回调结构体包含了回调函数和监控的对象类型&#xff0c;还有一个A…

周赛372(正难则反、枚举+贪心、异或位运算、离线+单调栈)

文章目录 周赛372[2937. 使三个字符串相等](https://leetcode.cn/problems/make-three-strings-equal/)模拟&#xff08;正难则反&#xff09; [2938. 区分黑球与白球](https://leetcode.cn/problems/separate-black-and-white-balls/)枚举 贪心 [2939. 最大异或乘积](https:/…

【双指针】:Leetcode1089.复写零

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本专栏是关于各种算法的解析&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结构专栏&…

鸿蒙APP外包开发上线流程

鸿蒙系统的上线流程可能会根据具体的版本和平台要求而略有不同。在进行上线之前&#xff0c;开发人员应该详细了解并遵循鸿蒙生态系统的相关规定和要求。鸿蒙&#xff08;HarmonyOS&#xff09;应用的上线流程通常包括以下步骤&#xff0c;希望对大家有所帮助。北京木奇移动技术…

OpenCV入门6——图像基本变换

文章目录 图像的放大与缩小缩放算法题目放大 图像的翻转图像的旋转仿射变换之图像平移仿射变换之获取变换矩阵仿射变换之变换矩阵之二OpenCV透视变换 图像的放大与缩小 缩放算法 # -*- coding: utf-8 -*- import cv2 import numpy as npimg cv2.imread(E://pic//4.jpg) # (600…

centos7离线安装docker

本文适用于无法直接上网的centos7/el7 离线安装docker 1. 下载安装包 官网下载安装包&#xff1a; https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 需要下载的包有&#xff1a; containerd.io docker-ce docker-ce-cli docker-ce-rootless-extras dock…

瞬态抑制二极管(TVS管)特性及电路应用?|深圳比创达电子EMC

瞬态抑制二极管简称TVS管(Transient Voltage Suppressor) 一、TVS管特性 瞬态抑制二极管是在稳压二极管的工艺上发展起来的,一种用途广泛的高效能保护器件。当TVS二极管的两极受到反向瞬态高能量冲击时&#xff0c;它能以皮秒量级的速度&#xff0c;将其两极间的高阻抗变为低…

qt和window抓包程序

1.思路 使用原始套接字&#xff0c;将网卡设置为混杂模式&#xff0c;监听该网卡的数据。 2. 了解协议封包和协议层 下图是tcp封包详细过程 数据包传输情况 在TCP/IP协议栈中的每一层为了能够正确解析出上层的数据包&#xff0c;从而使用一些“协议类型”来标记&#xff0c;详…

LeetCode538. Convert BST to Greater Tree

文章目录 一、题目二、题解 一、题目 Given the root of a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus the sum of all keys greater than the original key in BST. As a remin…

高压放大器使用方法介绍

高压放大器是一种用于放大高压信号的电子设备&#xff0c;常用于科学研究、工业应用和医疗设备等领域。它可以将低电压信号放大到较高的电压水平&#xff0c;以满足特定应用的需求。 使用高压放大器需要注意以下几个方面&#xff1a; 1.了解设备规格&#xff1a;在使用高压放大…

ubuntu 22.04版本修改时区的操作方法

修改时区比较简单&#xff0c;就是timedatectl set-timezone America/Los_Angeles加systemctl restart systemd-timesyncd&#xff0c;并且服务器重启后时区没有变回去还是修改后的 示例&#xff1a; 目前时区是UTC 0时区伦敦时间&#xff0c;想改成太平洋时区(Pacific Time&a…

《视觉SLAM十四讲》-- 建图

11 建图 11.1 概述 &#xff08;1&#xff09;地图的几类用处&#xff1a; 定位&#xff1a;导航&#xff1a;机器人在地图中进行路径规划&#xff1b;避障重建交互&#xff1a;人与地图之间的互动 &#xff08;2&#xff09;几类地图 稀疏地图稠密地图语义地图 11.2 单目…

解决Jira导出csv最大限度是1000的问题

JIRA为了防止过多影响性能&#xff0c; 设置了导出CSV的上线为1000&#xff0c;影响了搜索结果导出以及RestAPI。 可以通过以下配置参数修改此限制&#xff1a; 通过JIRA管理界面的"高级设置 “设置以下参数 系统管理 > 系统 > 一般设置>高级设置找到 jira.sea…

char*与char[]的区别

之前在给函数传形参时&#xff0c;char*和char[]我是混着用的&#xff0c;当时感觉它俩用起来没啥差别&#xff0c;就草率地把它俩混为一谈。 但实际上&#xff0c;这俩本质是不同的&#xff0c;只是在作为形参的时候可以互换使用。我这篇博客就是来记录下它俩的区别。 现在我定…

house of husk

利用说明 适用版本: glibc2.23 -- now 利用场景: UAF/大堆块/存在格式化字符的使用 利用条件: 能使 __printf_function_table 处非空 可以往 __printf_arginfo_table 处可写入地址 效果与限制: 可以劫持程序执行流, 但是参数不可控. 利用方式: 劫持 __printf_function_…

034、test

之——全纪录 目录 之——全纪录 杂谈 正文 1.下载处理数据 2.数据集概览 3.构建自定义dataset 4.初始化网络 5.训练 杂谈 综合方法试一下。 leaves 1.下载处理数据 从官网下载数据集&#xff1a;Classify Leaves | Kaggle 解压后有一个图片集&#xff0c;一个提交示…