Vue数据双向绑定原理,render的流程,data包裹为观察者--所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的。
https://www.cnblogs.com/xujiazheng/p/12120530.html#!comments
new Vue({
el: "#app",
data: {
prev: 'hello',
},
created() {
this.next = 'world';
},
mounted() {
setTimeout(() => {
this.next = 'memory'
}, 1000)
}
})
我们在created生命周期中赋值next,在mounted生命周期延迟一秒改变next的值,那结果会这样?
答:永远显示helloworld
如果已经掌握了vue实例化过程的同学可能已经猜到了为什么
当created生命周期执行时,此时还没有做vnode转化为真实dom的操作,此时data属性已经代理到this下,因此修改this.next就修改了data对象的值,data就变为了{prev: 'hello', next: 'world'},因此在render时就将next也渲染到了页面上
另外此时已经完成了数据驱动的灵魂步骤(将data遍历包装为观察者),因此在延迟1s后改变next值,仍然跟栗子2一样不会引起view更新的。
浙公网安备 33010602011771号