Vue数据响应式理解

172 阅读1分钟

响应式是什么

响应式就是当有一个条件(情况)发生,会做出相应的动作(反应)

在Vue中,数据响应的表现就是当vm实例中的data变化时,页面也会更新

Vue响应式

  • Vue会把vm实例中的data中的所有数据遍历一遍,都使用Object.defineProperty把这些数据(属性)全部转化成getter/setter,这样一来就可以监控这些属性的变化,并做相应操作
  • Vue的操作是当属性被修改时,调用render
  • Vue只会遍历data的第一层数据,如果调用了没有被声明的属性,Vue就会发出警告
  • 但是如果调用了第二层的没有被声明的属性,Vue不会发出警告
let vm = new Vue({
    data:{
        a:1,
        b:{
            c:3,
        }
    }
})

vm.a //响应式的
vm.b.c // 响应式的
vm.e // Vue会发出警告
vm.b.d // Vue不会发出警告
vm.f = 2 //f不是响应式的

也就是说:只有一开始就声明了的变量,才是默认可以有响应式的

如何添加响应式数据?

方法一:

Vue.set(vm.someObject,'f',2)
//Vue.set(Vue实例,变量名,变量值)

方法二:

vm.$set(vm.someObject,'f',2)
this.$set(this.someObject,'f',2)

两个方法等价,$set是Vue.set的别名

数组 如何添加响应式的数据?

方法一:同普通变量一样进行添加

方法二:尤大通过改写了Array中的push方法(变异方法),可以使用push方法在数组中添加数据,并且同时这个数据是响应式的。

拓展:同时变异的方法有 push,pop,shift,unshift,sort,reverse,splice