理解Vue响应式原理以及this.$set

Vue的响应式原理基于Object.defineProperty,通过getter和setter实现数据变化监听。当对象或数组属性变动时,Vue使用$set确保响应式更新。在数据变化后,Vue在异步更新队列中处理DOM更新,可通过Vue.nextTick回调处理更新后的DOM状态。
摘要由CSDN通过智能技术生成

https://www.jb51.net/article/162232.htm
https://baijiahao.baidu.com/s?id=1667581867911645201&wfr=spider&for=pc
https://cn.vuejs.org/v2/guide/reactivity.html

前言:其实使用vue的都知道,vue声明在data中的属性都是响应式的,也就是,我们在修改data中的属性时,一般页面都能实时更新。但是由于 JavaScript 的限制,Vue 不能检测数组和对象的变化。比如我们对data中的对象属性和数组属性进行一些修改时,无法响应式更新渲染到页面,因此vue提供了$set这个API来解决这个限制。

1、Vue响应式原理

Vue响应式原理实现方法时Object.defineProperty()方法,该方法存在一个getter和setter的可选项,可以对属性值的获取和设置造成影响。

Vue中编写了一个wather来处理数据

在使用getter方法时,总会通知wather实例对view层渲染页面
同样的,在使用setter方法时,总会在变更值的同时,通知wather实例对view层进行更新
2、响应式原理示意图
在这里插入图片描述
在这里插入图片描述

3、检测数据变化

对于对象
Vue 无法检测 property 的添加或移除。由于 Vue 会在初始化实例时对 property 执行 getter/setter 转化,所以 property 必须在 data 对象上存在才能让 Vue 将它转换为响应式的。

var vm = new Vue({
   
  data:{
   
    a:1
  }
})

// `vm.a` 是响应式的

vm.b = 2
// `vm.b` 是非响应式的

也就是说a的变化会使得视图层刷新,b的变化不会导致视图层刷新

对于已经创建的实例(比如为数组对象添加或者修改一个对象值),Vue 不允许动态添加根级别的响应式 property。但是,可以使用 Vue.set(object, propertyName, value) 方法向嵌套对象添加响应式 property。

Vue.set(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值