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更新的。

 

posted @ 2022-08-27 13:17  theyounggg  阅读(193)  评论(0)    收藏  举报