Vue2中给对象添加新属性界面不刷新

news2024/7/4 4:36:00

Vue2中给对象添加新属性界面不刷新?

Vue2.x的响应式

实现原理

  • 对象类型:通过Object.defineProperty()对属性的读取、修改进行拦截(数据劫持)。
  • 数组类型:通过重写更新数组的一系列方法来实现拦截。(对数组的变更方法进行了包裹)。
Object.defineProperty(data, 'count', {
    get () {}, 
    set () {}
})

存在问题

  • 新增属性、删除属性, 界面不会更新。
  • 直接通过下标修改数组, 界面不会自动更新。

解决方案

  • 使用Vue.setVue.delete或者vm.$setvm.$delete这些API

模拟vue2的响应式

//源数据
let person = {
	name:'张三',
	age:18
}
//模拟Vue2中实现响应式
let p = {}
Object.defineProperty(p,'name',{
	configurable:true,
	get(){ //有人读取name时调用
		return person.name
	},
	set(value){ //有人修改name时调用
		console.log('有人修改了name属性,我发现了,我要去更新界面!')
		person.name = value
	}
})
Object.defineProperty(p,'age',{
	get(){ //有人读取age时调用
		return person.age
	},
	set(value){ //有人修改age时调用
		console.log('有人修改了age属性,我发现了,我要去更新界面!')
		person.age = value
	}
})

vue3的响应式

结论

在vue3中已经不存在上述的问题了

实现原理

  • 通过 Proxy(代理): 拦截对象中任意属性的变化, 包括:属性值的读写、属性的添加、属性的删除等。
  • 通过Reflect(反射): 对源对象的属性进行操作。
let person = {
	name:'YK菌',
	age:18
}

const p = new Proxy(person,{
	//有人读取p的某个属性时调用
	get(target,propName){
		console.log(`有人读取了p身上的${propName}属性`)
       // return target[propName]
		return Reflect.get(target,propName)
	},
	//有人修改p的某个属性、或给p追加某个属性时调用
	set(target,propName,value){
		console.log(`有人修改了p身上的${propName}属性,我要去更新界面了!`)
        // target[propName] = value
		return Reflect.set(target,propName,value)
	},
	//有人删除p的某个属性时调用
	deleteProperty(target,propName){
		console.log(`有人删除了p身上的${propName}属性,我要去更新界面了!`)
		// return delete target[propName]
       return Reflect.deleteProperty(target,propName)
	}
})

为什么要使用Reflect,ECMA正在把Object上的方法转移到Reflect上面去

因为要让框架变得更加健壮,所以需要捕获错误,要不然一发生错误就运行不了了
利用Object.defineProperty捕获错误需要使用trycatch,不易读
在这里插入图片描述

而使用Reflect,因为Reflect会有返回值,直接使用if判断就可以捕获错误了
在这里插入图片描述

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

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

相关文章

敏捷世界还需要有QA吗?

敏捷开发模型现在已经被越来越多的公司熟知并使用,很多公司会选择敏捷开发模式的转型,其主要目的就是为了不断适应变化以及客户快速交付的诉求。为什么敏捷开发能够被诸多大众接受?可以从两个维度来看: 首先,从开发人员…

条码系统(PC/PDA)对接NC接口功能

条码系统功能清单功能模块功能菜单明细菜单支持终端功能描述业务流程框架pc端框架搭建 PC端整体框架工具搭建,提供字典配置,PDA端的参数配置,NC数据源,NC接口调用工具等 PDA端框架搭建 PDA端安卓端框架基础功能APP创建,数据源,功能菜单等 服务器环境部署 PC端/PDA端pc端/P…

使用YOLOV8实现滑块缺口验证码识别,并使用Fastdeploy快速部署,精度高达99%!!

前言:首先大家对滑块缺口验证码的识别应该有很多经验了,大部分人可能阅读过我的文章或者其他人的文章,能从各方了解到,滑块缺口的各种实现方式,例如模板匹配、边缘检测、提取透明通道、yolov5,paddledection等,此篇文章将会讲解yolov8的使用和训练,yolov8相对于yolov5有…

真心牛x,阿里出品2023最新版Spring全家桶进阶笔记流出,堪称Java程序员跳槽神器

最近小伙伴在我后台留言是这样的: ​现在就这光景,不比以前,会个CRUD就有人要,即使大部分公司依然只需要做CRUD的事情......现在去面试,只会CRUD还要被吐槽: ​面试造火箭,工作拧螺丝&#xff0…

六级备考23天|CET-6|翻译技巧5|2019年12月真题|翻译荷花lotus|11:05-12:05

目录 一、中文 句子1 PRACTICE ANSWER 句子2 PRACTICE ANSWER 句子3 ​ PRACTICE ANSWER 句子4 PRACTICE ANSWER 句子5 PRACTICE ANSWER 句子6 PRACTICE ANSWER ​ 答案整合​ 一、中文 句子1 荷花是中国的名花之一,深受人们喜爱。 PRACTICE Lotus is one…

CMakeLists.txt 文件详解

目录 CMakeLists.txt 常见内容和结构: 文件中的命令和配置: 官方文档: CMakeLists.txt CMakeLists.txt 文件是用于描述 CMake 构建过程和项目配置的文件。它包含了一系列 CMake 命令、变量设置和流程控制结构,用于告诉 CMake 如何生成适合…

pycharm中关于debug模式中按钮的介绍

文章目录 前言一、pycharm中debug的按钮介绍(横排按钮)二、pycharm中debug的按钮介绍(竖排按钮)总结 前言 遇到了debug模式下的调试按钮问题。 一、pycharm中debug的按钮介绍(横排按钮) 步过:s…

七人拼团系统开发模式,助力企业三个月新增超十万会员!

现在市场上最不缺的就是好产品,产品在市场上目前已经趋于饱和。要想让自己的产品或企业快速打入市场,最好的办法是结合好的营销模式,让企业快速起步裂变提升销量。现在就有这么一款模式,助力企业在三个月内就新发展了超十万会员&a…

MySql高可用方案

MySql高可用方案 1、主从、主主(互为主从)keepalived 2、MHA MHA(Master High Avaliable) 是一款 MySQL 开源高可用程序,MHA 在监测到主实例无响应后,可以自动将同步最靠前的 Slave 提升为 Master,然后将其他所有的 S…

【JavaSE】Java基础语法(三十三):File 一文详解

文章目录 1. File类概述和构造方法2. 绝对路径和相对路径3. File类创建功能【应用】4. File类删除功能【应用】5. File类判断和获取功能【应用】6. 6File类练习一【应用】7. File类练习二【应用】 1. File类概述和构造方法 File类介绍 它是文件和目录路径名的抽象表示文件和目录…

阿里面试测试工程师,水太深,我把握不住了......

前言 去阿里面试测试工程师,这里面水太深,什么未来规划,职业发展的东西都是虚拟的,作者还太年轻,没有那个经历,把握不住。项目只有几个,开心快乐就行,不PK,文明PK。 很多…

组合总和 II

1题目 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例 1: 输入: candidates [10,1…

搭建LightPicture开源免费图床系统「公网远程控制」

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 转载自cpolar极点云的文章:【搭建私人图床】使用LightPicture开源…

Parasoft亮相上海国际嵌入式展

全球自动化软件测试解决方案的领导者Parasoft宣布参加6月14日至16日在上海举行的首届embedded world China上海国际嵌入式展,此次Parasoft联合检测认证领域的领导者-莱茵技术(上海)有限公司共同参展,为嵌入式行业提供符合功能安全…

电子表格的武侠江湖里,有VBA加持的Excel,也只能算一把菜刀

Excel,都用过吧? 没用过肯定也听说过。 这可是Windows里颇具传奇色彩的软件,堪称一把九天陨铁淬炼而成的菜刀。 普通人,用它做表格, 进行简单的数据汇总。 职场人,继续用它做表格, 开始求和…

请问下大家PMP证书值得考嘛?

做项目的去考,项目经理、产品经理这些,或者有往项目管理领域发展的去考。其他行业有空可以学习下 不一定要考证了。 PMP证书更多的是 “敲门砖”作用,大部分公司招聘的门槛都要去了这个证书。 当然现在PMP管理模式也很热门,各大…

国产的高精度ADC HX711 CS1237 TM7707等如何选型

最近小伙伴们咨询我,国产很多高精度的ADC,如何选型使用呢?这里我们主要讨论几款24位差分输入。 ADC/DAC相关名词解释 ADC输入范围ADC转换速度ADC稳定位数 在我们选的时候主要考虑上面三个参数 ADC参数对比 型号输入范围输出速率建立时间PG…

网页JS自动化脚本(八)使用网页专属数据库indexedDB进行数据收集

我们在网页上进行的活动,往往都需要进行收集一些简单的数据,但是因为浏览器的安全原因,浏览器基本上是无法与本地的操作系统直接产生数据交互的,这本来就是一个由于安全问题生产的无解问题,在浏览器里面是内置了几种数据库的,其中一种就是indexedDB,可以用来储存一些非常小的数…

多主题插件上线!开源的 API 管理工具居然这么有意思!

之前我一直在用的开源API 管理工具——Postcat 最近上线了新的主题插件,真的有意思! 之前就用用户提 issue 没想到终于安排上了,给这个项目点赞! 挑几款我偏好的主题插件,简单看看 第一款,【VSCode 主题】&…

鸿蒙Hi3861学习二十-编译构造

一、简介 在使用编译构造子系统前,应了解如下基本概念: 子系统 子系统是一个逻辑概念,它由一个或多个具体的组件构成、OpenHarmony整体遵从分层设计,从下向上依次为:内核层、系统服务层、架构层和应用层。系统功能按照…