likes
comments
collection
share

尤大大为什么在vue2.0中放弃实现数组的响应式?

作者站长头像
站长
· 阅读数 71
首先使用过vue的小伙伴对Object.defineProperty()应该都耳闻能详。
而Vue2.0中就是通过这个Api实现数据的双向绑定。

拓展:数据的双向绑定原理

主要是通过observe函数对所有数据遍历,同时加上set,get方法,这样就能通过Object.defineProperty()劫持set、get。通过解析器对数据解析,初始化之后会渲染页面,同时添加Watcher订阅者监听数据的变化.一旦数据变化就会立即收到通知,并且更新视图---(ps:Watch里面会在实例化的Dep中通过notice通知,从而调用update()触发数据更新)

但是通过这种方式有个非常明显的缺陷就是通过数组的下标修改值数据并不是响应式很多人都只是知其然不知其所以然,他错误的把原因归结到Object.defineProperty()身上那么本质上是不是这个原因呢?

答案肯定是:不是的!!!!

请往下看

尤大大为什么在vue2.0中放弃实现数组的响应式? 很明显触发了Object.defineProperty()并且数据劫持到了,那么既然如此为什么Vue2.0中尤大大没有实现数据的响应式呢?

★尤大大在官方是这样解释的:主要就是考虑性能问题才这么干,并不是不能实现!!!!

尤大大为什么在vue2.0中放弃实现数组的响应式?

针对以上问题,Vue 所做出的解决方式是提供了对于数组的几个变异方法进行监听,例如 push(), pop(), shift(), unshift(), splice(), sort(), reverse()等。使用这些方法来修改数组,Vue 就能监听到数组的变化并及时更新视图。

同时还可以使用$Set(arr,index,target)修改数组数据同样能实现响应式。

转载自:https://juejin.cn/post/7227364485500764216
评论
请登录