欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Vue监听对象属性失效原因分析及dom渲染问题出现分析

程序员文章站 2024-01-02 21:17:46
...

首先得明确,数据监听是vue在创建实例时通过Object.defineproperty方法进行监听。当vue实例创建以后,自己手动通过obj.b = 10的方式新增对象属性是不会通过defineproperty方法定义监听,因此是不会被监听到的,就不会引起视图重新渲染
Vue监听对象属性失效原因分析及dom渲染问题出现分析

接下来我们对一段有趣的代码进行分析:
Html:
Vue监听对象属性失效原因分析及dom渲染问题出现分析

Data数据:

Vue监听对象属性失效原因分析及dom渲染问题出现分析

Test方法:

Vue监听对象属性失效原因分析及dom渲染问题出现分析

执行点击后结果:

既然this.obj.flag定义属性方法会失效,为什么这里的flag属性会被渲染到dom上呢?
其实通过this.obj.flag虽然并不会引起视图的重新渲染,但是这个属性其实是被添加上去了。而通过this.$set方法去定义属性时是可以被监听到的,就会引起视图的重新渲染,此时就会顺便把之前改变了数据但是没有被渲染的flag属性一起渲染上。
那么我们把两句代码的位置换一下结果会不会符合我们的预期呢?
Vue监听对象属性失效原因分析及dom渲染问题出现分析
Vue监听对象属性失效原因分析及dom渲染问题出现分析

然而结果还是和之前一样。
结果分析: dom渲染是异步渲染,它会等待同步任务执行完之后再执行,所以等视图进行更新的时候flag属性已经被添加上了,就会被一起渲染上。实际上视图更新会等待同步任务之后,宏任务执行,微任务执行队列被执行清空之后再进行渲染。而这样做是因为vue的虚拟dom机制。

上一篇:

下一篇: