我对 Vue 数据响应式的理解

335 阅读1分钟

Vue最大的特点就是它的数据响应式了。

我们之前称之为双向数据绑定,现在不这样叫了,是因为他已经不是双向数据绑定了。

Vue改过很多版,忘记其中那一版本将双向数据绑定用单向数据流模拟。

所以现在被称作数据响应式。

数据响应式最大的好处就是只要数据发生变动,UI就会随之渲染,对开发者来说特别的方便。

那么它其中的原理是什么样子的?

原理

  • 他是使用了Object.defineProperty()这个方法。
  • 还是用了 get/set 监听数据变动,从而改变数据。
  • 只要数据变动就会重新render(),达到重新渲染UI的作用。

变异方法

我们知道Vue是数据响应式的,接下来我们想想,是不是所有的数据都是响应式的?

比如一个数组,我们通过改变数组中的元素,UI会跟着变化么?

var vm = new Vue({
    data () {
        return {
            items: ['1', '2', '3']
        }
    }
})
vm.items[4] = '4' // 发现页面并没有变化
vm.items.push(4)  // 发现UI重新渲染了

为什么会这样??是因为Vue中的数组变异属性提供的能力。

Vue中有七个数组的变异属性,这些变异属性是Vue对JS的重新封装,给予了这些属性重新渲染UI界面的能力。也就是通过Object.defineProperty()中的get/set方法。

这七个属性如下:

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

以上的七个属性,就是Vue的变异属性,他们会重新渲染UI。

总结:

  • Vue数据响应式的原理。
  • 变异属性