什么是响应式
对外部输入的变化产生了反应,就是响应式的,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实例就可调用渲染函数,对变化后的数据进行渲染