【Vue】响应式与数据劫持

news2024/9/29 13:19:20

目录

前言

响应式

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

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

相关文章

VScode调试没有反应

点击调试按钮后没反应 有可能是vscode中安装的python插件版本问题 可以通过重新安装比较旧一点的python尝试解决此问题 步骤如下&#xff1a; 然后从中选择比当前版本更低的版本即可 安装完成后需重启vscode

Unity中Shader的PBR的基础知识与理论

文章目录 前言一、什么是PBR二、什么是PBS在这里插入图片描述 三、PBS的核心理论1、物质的光学特性&#xff08;Substance Optical Properties&#xff09;2、微平面理论&#xff08;Microfacet Theory&#xff09;3、能量守恒&#xff08;Energy Conservation&#xff09;4、菲…

Linux中的MFS分布式文件系统

目录 一、MFS分布式文件系统 1、MooseFS简介 2、Moose File System的体系结构 &#xff08;1&#xff09;MooseFS Master &#xff08;2&#xff09;MooseFS Chunk Server &#xff08;3&#xff09;MooseFS Metalogger &#xff08;4&#xff09;MooseFS Client &…

InnoDB 的一次更新事务是怎么实现的?

大体流程&#xff1a; 步骤: 1.加载数据到缓存中&#xff08;Buffer Pool&#xff09;&#xff1a; 在进行数据更新时&#xff0c;InnoDB首先会在缓冲池&#xff08;Buffer Pool&#xff09;中查找该记录是否已经在内存中。如果记录不在内存中&#xff0c;会将需要更新的数据…

django+drf+vue 简单系统搭建 (3) - 基于类的视图

传统Django中有基于类的视图&#xff0c;Drf中自然也有&#xff0c;目的都是实现功能的模块化继承&#xff0c;封装&#xff0c;减少重复代码。 首先在视图中新增下面代码&#xff1a; # simpletool/views.pyfrom rest_framework.views import APIView from simpletool.seria…

matplotlib violinplot换颜色

本来用的是箱图&#xff0c;后来发现这个图更好看&#xff0c;就想要学习一下&#xff0c;官方有给教程&#xff0c;当然可以直接学习 https://matplotlib.org/stable/gallery/statistics/customized_violin.html 以上是官方给的&#xff0c;效果是这个样子的 这个从最基本的蓝…

redis运维(十二)

一 位图 ① 概念 1、说明&#xff1a;位图还是在操作字符串2、位图玩字符串在内存中存储的二进制3、ASCII字符通过映射转化为二进制4、操作的是字符串value ② ASCII字符铺垫 1、控制ASCII字符 2、ASCII可显示字符 ③ SETBIT 细节&#xff1a; setbit 命令的返回值是之…

stack和queue简单实现(容器适配器)

容器适配器 stack介绍stack模拟实现queue 介绍queue模拟实现deque stack介绍 stack模拟实现 以前我们实现stack&#xff0c;需要像list,vector一样手动创建成员函数&#xff0c;成员变量。但是stack作为容器适配器&#xff0c;我们有更简单的方法来实现它。 可以利用模板的强大…

linux之chmod命令

在linux系统中经常遇到需要对文件修改读写执行的权限&#xff0c;下面对chomod命令进行梳理总结。 1、文件权限 在linux系统中&#xff0c;每个文件都有归属的所有者和所有组&#xff0c;并且规定了文件的所有者、以及其他人对文件所拥有的可读&#xff08;r&#xff09;、可写…

年薪30w项目经理都在用的6个项目管理软件

大家好&#xff0c;我是老原。又到了每月一次的好用工具推荐&#xff0c;不少粉丝都在搓手等待了。 要知道&#xff0c;实时掌握项目进度、把关项目质量、应对项目风险、协调资源…如果能好用的工具高效提升你的工作效率&#xff0c;对于领导来说&#xff0c;绝对是加分项。 …

linux:查看文件前100行和后100行

查看文件中的前100行 head -n 100 文件名查看文件中的后100行 tail -n 100 文件名

《洛谷深入浅出基础篇》P3916 图的遍历——逆向搜索

上链接&#xff1a; P3916 图的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P3916上题干&#xff1a; 题目描述 给出 N 个点&#xff0c;M 条边的有向图&#xff0c;对于每个点 v&#xff0c;求 A(v) 表示从点 v 出发&#xff0c;能到…

el-form动态表单动态验证(先验证不为空,再验证长度在20以内,最后向后台发送请求验证账号是否重复)

data(){var checkSno (rule, value, callback) > {if (!value) {callback(new Error("请输入账号"));} else if (value.length > 20) {callback(new Error("长度为1-20"));} else {if (this.form.id) {// 修改时检查账号是否重复selectLoginId({ sn…

html2canvas快速使用

一、概述 html2canvas是一个HTML渲染器&#xff0c;是一个脚本&#xff0c;它允许你直接在用户浏览器截取页面或部分网页的“屏幕截屏”。底层是基于DOM的&#xff0c;根据页面上可用的信息构建屏幕截图&#xff0c;它没有制作实际的屏幕截图&#xff0c;因此生成的图片并不一定…

NTT 的各类优化

参考文献&#xff1a; [Har14] Harvey D. Faster arithmetic for number-theoretic transforms[J]. Journal of Symbolic Computation, 2014, 60: 113-119.[Sei18] Seiler G. Faster AVX2 optimized NTT multiplication for Ring-LWE lattice cryptography[J]. Cryptology ePr…

DSP介绍及CCS

文章目录 CCS版本编译器CCS使用注意严禁中文 CCS的基本操作新建工程导入现有工程调整字体的大小工程界面恢复标签的使用 仿真盒小虫子进入在线Debug 芯片TMS320F28355基本介绍特性 DSP中特殊指令dsp指令中的EALLOW EDIS CCS TI官网 版本 CCS版本&#xff1a; CCS8.3.1.0004_…

C语言的基础概念

1、编译和链接 C语⾔是⼀⻔编译型计算机语⾔&#xff0c;C语⾔源代码都是⽂本⽂件&#xff0c;⽂本⽂件本⾝⽆法执⾏&#xff0c;必须通过编译器翻译和链接器的链接&#xff0c;⽣成⼆进制的可执⾏⽂件&#xff0c;可执⾏⽂件才能执⾏。 C语⾔代码是放在 .c 为后缀的⽂件中的…

玩转大模型行业应用,且看盘古大模型全栈工程能力展身手【云驻共创】

AI技术在金融和工业领域的应用不断扩展&#xff0c;促进了金融行业的数字化转型和产业升级。AI提供了专属财富管家和工业范式的解决方案&#xff0c;在金融领域的应用包括风险评估和投资建议&#xff0c;而在工业领域的应用则涵盖了数据分析和机器人操作。与此同时&#xff0c;…

【代数学习题4.2】从零理解范数与迹 —— 求数域元素的范数与迹

从零理解范数与迹 —— 求数域元素的范数与迹 写在最前面题目解答 2. 范数 N N N思路求解过程python求解 3. 数域 K K K 的范数 N K N_K NK​思路求解过程Python求解分析解题步骤 4. 迹 T T T求解过程共轭元素计算迹 python求解分析解题步骤 5. 数域 K K K 的迹 T K T_K …

第三届VECCTF-2023 Web方向部分wp

拳拳组合 题目描述&#xff1a;明喜欢保存密钥在某个文件上。请找到秘钥并读取flag文件。 开题&#xff0c;点不完的。源码提示&#xff1a; <!--据说小明很喜欢10的幂次方--> 扫一下看看&#xff0c;应该是有git泄露。 其它一些路由没什么用 git泄露拿下一堆码 pytho…