Vue的响应式原理

文章比较了Vue2中使用Object.defineProperty的机制,强调其对复杂对象监听的局限性,以及Vue3中proxy的改进,包括性能提升和对数组变化的自动检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Vue2方式:

        使用的Object.defineProperty来做的,在页面刚开始加载时,vue会遍历data中的所有属性,然后使用Object.defineProperty把这些属性全部转换为getter/setter,当用户访问这些属性时,会触发对应的getter/setter方法,然后会通知每个组件实例对应的一个watch方法,最后实现视图的更新

但是Object.defineProperty也有缺点,主要有三:

1、对于复杂对象,需要深入监听,一次性监听到底,它的计算量是很大的

2、对于对象新增删除属性它是无法监听的,需要使用Vue.$set和Vue.$delete来作为辅助

3、需要重写数组原生方法,来实现数组的监听

Vue3方式:

        使用来proxy代替Object.defineProperty,其优势如下:

1、他可以直接监听整个对象,而不需要遍历监听属性,性能有所提升

2、他可以监听到数组的变化,而不需要去重写数组原生的方法

3、有多达13种拦截方法,它的功能会更加强大

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值