vue数据响应式

99 阅读1分钟

什么是响应式

对外部输入的变化产生了反应,就是响应式的,Vue的data是响应式的

  • const vm=new Vue({data:{value:0}})
  • 如果修改vm.n,那么UI中的n就会产生响应,随之改变
  • Vue通过Object.defineProperty来实现数据响应式

Vue对data做了什么?

const myData = {  value: 0}
console.log(myData) 
new Vue({  
    data: myData,  
    template: `    <div>{{value}}</div>  `
    }).$mount("#app");

setTimeout(()=>{  
    myData.n += 10  
    console.log(myData) 
},3000)

观察控制台打印的内容可以发现,当新建了Vue实例之后,myData已经发生了变化,原理是通过Object.defineProperty给这个这个对象添加了value属性,还给这个对象添加了getter/setter,用于对属性的读写进行监控

而新的vue实例是成为了myData的代理(proxy),由这个代理来对myData对象的属性进行读写,由于有了监控,当myData的属性发生变化的时候,vue实例就可调用渲染函数,对变化后的数据进行渲染