vue2的响应式原理

vue2的响应式原理

  1. 首先用observer方法观察data数据
    如果是普通的数据,string,number,Boolean数据,则直接return target,然后遍历target中的数据,在遍历函数中调用defineReactive方法,在defineReactive方法中调用object.defineProperty方法,在其中设置get和set方法,将数据变成响应式数据,set中会接收newValue,用新值取代老值,而且渲染更新视图
    普通数据
    2. 如果是data中的对象数据,改变对象中的数据时,视图不会更新,因为object.defineProperty只能监听到第一层的数据变化,如果要监听对象中的数据改变,则需要在defineReactive函数中深度观察value,直到它不是一个对象为止,在object.defineProperty的set方法中也深度监听value值,直到它不是一个对象为止,这样对象中的数据改变可以被监测到,并且在视图层相应
    对象数据
    object.defineProperty的缺点

    一:object.defineProperty会深度监听所有的对象数据,如果对象数据层级很深的话,在首次渲染的时候可能会造成页面卡死,因此在vue3中优化了这部分的数据监听,用proxy,这样不会一上来就深度监听所有的对象数据,而是在需要使用到这个数据的时候,才会做相应的监听这个数据
    二:object.defineProperty不能删除data中的数据,或者新增数据到data中,视图层不会更新,删除要用vue.delete,新增要用vue.set,这样视图层才会更新
    数据删除和新增

  2. 数组数据
    如果data中有数组数据,在vue中数组的push方法是会在视图响应的,如何实现数组的响应呢,用的是拷贝array的原型prototype上的方法,然后给observer方法用,OK

    数组方法
    仅记录

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值