vue2与vue3响应式原理介绍

7 篇文章 0 订阅
订阅专栏
文章介绍了Vue2使用Object.defineProperty实现响应式原理,通过setter和getter监控数据变化。而在Vue3中,响应式原理升级为使用Proxy和Reffect,能更全面地拦截和响应数据的增删改查操作,克服了Vue2的某些限制。
摘要由CSDN通过智能技术生成

vue2与vue3响应式原理介绍


文章目录

  • vue2与vue3响应式原理介绍
  • 概念
  • 一、vue2响应式原理
    • 代码展示
    • 注:
  • 二、 Vue3中的响应式原理
  • 总结


概念

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、vue2响应式原理

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

通过 Object.defineProperty 遍历对象的每一个属性,把每一个属性变成一个 getter 和 setter 函数,读取属性的时候调用 getter,给属性赋值的时候就会调用 setter.
当运行 render 函数的时候,发现用到了响应式数据,这时候就会运行 getter 函数,然后 watcher(发布订阅)就会记录下来。当响应式数据发生变化的时候,就会调用 setter 函数,watcher 就会再记录下来这次的变化,然后通知 render 函数,数据发生了变化,然后就会重新运行 render 函数,重新生成虚拟 dom 树。
在这里插入图片描述

代码展示

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

通过添加后发现控制台打印了,但页面并未渲染
Vue.set 和 this. s e t 的关系 t h i s . set的关系 this. set的关系this.set 实例方法,该方法是全局方法 Vue.set 的一个别名
this.$set(this.person,‘sex’,‘男’)
Vue.set(this.person,‘sex’,‘男’)

注:

在这里插入图片描述

二、 Vue3中的响应式原理

实现原理:
通过Proxy(代理): 拦截对象中任意属性的变化,包括:属性值的读写,属性的增加,属性的删除等。

通过Reffect(反射): 对源对象的属性进行操作

new Proxy(data,{
  //拦截读取属性值
  get(target, prop){
    return Reflect.get(target, prop)
  },
  //拦截设置属性值或添加新属性
  set(target, prop, value){
    return Reflect.set(target, prop, value)
  },
  //拦截删除属性
  deleteProperty(target, prop){
    return Reflect.deleteProperty(target, prop)
  }
})

proxy
Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。

被 Proxy 代理虚拟化的对象。它常被作为代理的存储后端。根据目标验证关于对象不可扩展性或不可配置属性的不变量(保持不变的语义)。

const p = new Proxy(target, handler)

参数:
target:
要使用 Proxy 包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。

handler:
一个通常以函数作为属性的对象,各属性中的函数分别定义了在执行各种操作时代理 p 的行为。
在这里插入图片描述
Reffect
Reflect是一个组合的对象,它提供了阻止 JavaScript 操作的方法。Reflect不是一个函数对象,因此它是不可构造的。

在reffect身上,就有defineProperty()这个方法

const p = new Proxy(person, {        //创建代理
      // 查
      get(target,propName){
          console.log(`有人读取了p身上的${propName}`)
          return target[propName];  
          //反射
          return Reflect.get(target,propName)
      },
      // 改 增
      set(target, propName, value){
          console.log(`有人修改了p身上的${propName}属性`);
          target[propName] = value;
      },
      // 删
      deleteProperty(target, propName){
          console.log(`有人删除了p身上的${propName}属性`)
          return delete target[propName];
      },
  });

在这里插入图片描述
不管是通过p对象对person对象进行增删改查任意一种操作,都能监测到,同时数据也能得到更新,对比起Vue2来说,确实真正意义上实现了数据的完全式响应。

而在Vue3数据的更新是proxy配合Reffect来实现的,在上述代码中,我只展示了通过Reffect来读取属性值,剩下的都是原生的数代理。

总结

以上就是Vue3中数据想响应式的原理,在Vue2中,数据响应式主要借助Object.defineProperty()来实现,存在的缺陷是无法操作数据的增加和删除,在Vue3中,数据响应式主要借助proxy和Reffect配合实现,可以做到实现数据的增删改查。

vue2和vue3响应式原理
qq_52275987的博客
12-22 631
vue2和vue3响应式原理 文章目录vue2和vue3响应式原理一、问题分析?二、Object.defineProperty使用方法:6个配置项(4个酱油,2个重要)三、实现一个简单的响应式代码四、观察者模式五、实现一个简易的vue六、vue3实现响应式七、vue2和vue3实现响应式的区别八、浅淡vue2为什么不能直接监控数组的操作九、自我总结 一、问题分析? 1.如何实现数据变了,视图也跟着变?核心是:如何知道对象的属性值被修改了? 2.如何实现一个数据变量,多出视图跟着变? 3.如何保证视图改变
三、【Vue3】——Vue2与Vue3响应式原理区别
yifei1234567的博客
03-30 4956
Vue2实现响应式原理使用的是Object.defineProperty()对对象中某个属性的读取、修改进行拦截,存在新增和删除缺陷。而Vue3实现响应式原理使用的是Proxy代理,拦截对象中任意属性的变化;
Vue2和Vue3响应式原理【全】
m0_60676278的博客
04-14 3382
响应式原理就是指的是MVVM的设计模式的核心,即数据驱动页面,一旦数据改- 变,视图也会跟着改动。vue2的响应式原理是由Object.defineProperty()实现的 (数据劫持)vue3的响应式原理是由es6中的Proxy所实现的 (数据代理)直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。(应当直接在 Object 构造器对象上调用此方法,而不是在任意一个 Object 类型的实例上调用。
前端面试必看】深度解读Vue2和Vue3的响应式
最新发布
wyfgoodgoodstudy的博客
08-29 1057
深度解读Vue2和Vue3的响应式原理
vue2与vue3的响应式原理
韩旭不会敲代码吧的博客
12-07 3655
vue2 1、对象类型 原理:通过Object.defineProperty()对属性的读取、修改进行拦截(数据劫持)。 1、定义数据: const vm = new Vue({ el: '#root', data: { person:{ name: '张三', age: 18 } } }) 2、加工数据:为了实现响应式vue会给data中的每一组key:value都形成了get和set的写法 只要data中的属性发生改变,就会调用set方法,然后重新解析模板,生成虚拟DOM,新旧虚拟DOM
vue2和vue3响应式原理
weixin_67343852的博客
11-09 2595
vue2和vue3响应式原理
Vue2和Vue3的响应式原理
weixin_48567214的博客
10-14 295
对象类型: 通过Object.defineProperty()对属性的读取、修改进行拦截(数据劫持)通过Proxy(代理):拦截对象中任意属性的变化,包括:属性值的读写、属性的添加、属性的删除等等。数组类型:通过重写更新数组的一系列方法来实现拦截。(对数组的变更方法进行了包裹)vue3底层源码不是我们上面写的那么low,实现原理一样,但是用了一个新的方式。MDN文档中描述的Proxy与Reflect:可以参考对应的文档。通过Reflect(反射):对被代理对象的属性进行操作。
Vue3.0数据响应式原理详解
10-16
Vue3.0的数据响应式原理是其核心特性之一,它极大地优化了开发体验并提高了性能。在Vue3中,响应式系统的实现主要依赖于ES6的`Proxy`和`Reflect`对象,这两个新特性使得Vue能够更加精细地监控数据的变化。 1. **ES6...
vue2和vue3的响应式原理对比
weixin_53474595的博客
01-04 705
从代码可以看出arr数组可以使用push方法主要是因为 当我们定义arr=[]时,其实它相当于arr=new Array(),所以arr指向Array的原型函数,即arr.__proto__=Array.prototype,所以arr可以使用数组的push等方法,但是现在我们把arr.__proto__又等于obj了,所以。2.数组直接通过下标修改元素,比如(arr[1]=xxx)或者更新数组的length,界面不会自动更新,不是响应式的。从打印的结果可以看出,对象和数组已经改变了,但是页面不更新。
20_Vue2-Vue3响应式原理.pptx
01-25
Vue 2 和 Vue 3 在响应式原理上有一定的差异,但都致力于确保视图能够实时反映数据模型的变化。以下是关于Vue 2和Vue 3响应式原理的详细解释。 1. 响应式的基本概念: 响应式系统意味着当数据发生变化时,与该数据...
Vue响应式原理详解
08-30
下面我们将详细探讨Vue响应式原理的各个方面。 首先,Vue通过`Object.defineProperty`方法实现了数据响应化。当你将一个普通的JavaScript对象传递给Vue实例的`data`选项时,Vue会遍历这个对象的所有属性,并用`...
Vue2 和 Vue3 的响应式原理
l1830473688的博客
07-18 465
Vue2 和 Vue3 的响应式原理
Vue2和Vue3之响应式原理详解
上善若泪
03-26 877
在讲解之前,我们先了解一下数据响应式是什么?所谓数据响应式就是建立响应式数据与依赖(调用了响应式数据的操作)之间的关系,当响应式数据发生变化时,可以通知那些使用了这些响应式数据的依赖操作进行相关更新操作,可以是DOM更新,也可以是执行一些回调函数。Vue3track(收集依赖)和trigger(触发依赖)
vue2 和 vue3 的响应式原理
qq_16786131的博客
03-19 375
#####1.vue2 响应式 实现原理 对象类型:通过 Object.difineProperty() 对属性的读取,修改进行拦截(数据劫持) 数组类型:通过重写更新数组的一系列方法来实现拦截,(对数组的变更方法进行了包裹) Object.defineProperty(data,'count',{ get(){}, set(){} }) 存在问题 新增属性、删除属性,界面不会更新(需要使用 this.$set
vue2与vue3响应式原理
c.j.h_code的博客
12-07 2427
通过Proxy(代理):拦截对象中任意属性的变化,包括:属性值的读写、属性的添加、属性的删除等 通过Reflect(反射):对被代理对象的属性进行操作
Vue2与Vue3的响应式原理
qq_47199913的博客
04-22 611
大家好,今天给大家分享一下Vue2和Vue3的响应式原理;说到响应式无非就是监听属性的获取,修改及删除...,了解逻辑之后再去实现底层代码岂不是快了许多=_= Vue2响应式 原理:利用defineReactive方法,通过defineProperty对属性进行劫持,数组则是通过重写其方法来进行劫持,每个属性值都拥有自己的dep属性,用来存取所依赖的watch,当数据发生改变时,触发相应的watch去更新数据 代码实现: const { arrayMethods } = require(.
Vue2和Vue3中的响应式原理
ge15139567650的博客
10-08 222
1.实现原理 对象类型:通过Object.defineProperty()对属性的读取、修改进行拦截(数据劫持)。 数组类型:通过重写更新数组的一系列方法来实现拦截。(对数组的变更方法进行了包裹)。 2.存在问题 ①新增属性、删除属性, 界面不会更新。 ②直接通过下标修改数组, 界面不会自动更新。 3.Vue2解决这些问题的方法: ① 针对对象新增和删除,引入$set方法,属性添加:this.$set(this.person,'sex','女'),属性删除:this.$delete(thi..
vue2与vue3响应式原理总结
BoZai_ya的博客
06-21 176
vue2与vue3响应式原理
写文章

热门文章

  • Js-正则替换字符串replace()方法超详细用法 2095
  • vue3计算属性computed属性 1900
  • ant-design中选中并获取table当前这一行的数据 1749
  • vue2与vue3响应式原理介绍 1197
  • CSS样式:如何让背景图片占满整个屏幕 1077

分类专栏

  • 面试题 12篇
  • css 2篇
  • js 2篇
  • vue 7篇
  • koa洋葱模型 1篇
  • webSocket 1篇
  • react 13篇
  • 服务器部署 1篇
  • webpack 1篇
  • antd 1篇
  • django 1篇
  • git 1篇

最新评论

  • git知识总结

    CSDN-Ada助手: 推荐 CS入门 技能树:https://edu.csdn.net/skill/gml?utm_source=AI_act_gml

最新文章

  • 2205A 周考(一)整理
  • vue生命周期?以及vue2和vue3生命周期的区别
  • vue3watch 与watchEffect
2023年39篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司上海网站搜索优化辽宁网站建设优化价格杭州网站优化有必要做吗电商网站性能优化福田百科网站优化多少钱河南网站seo优化公司资源网站优化排名优化网站优化最新技巧自贡网站制作优化服务天津济南网站优化南宁什么叫网站优化网站优化与推广山东网站优化哪家强网站权重优化搜行者SEO企业网站优化找哪家楚雄市网站seo优化排名单词网站优化泰安网站seo优化公司网站建设搜索优化烟台网站优化公司花都区网站整站优化独立网站怎么优化换网站对网页优化有什么影响网站的优化只选z火17星热情德州市网站优化渠道优化网站软件就找vs火11星吕梁网站优化客服仙桃外包网站优化价格横沥五金网站优化哪个公司好网站优化外包服务好么香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化