采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师我看到本章的问答中,你有说它是微任务是基于promise实现的。 但也有说它就是一个setTimeout,有点困惑,它到底是宏任务还是微任务呢 1: 根据nextTick会在DOM渲染后被触发,我猜测它应该是个宏任务,不知道对不对?
2: 老师请问nextTick回调是在哪个生命周期函数里面执行的?
第一,nextTick 是微任务(除非浏览器不支持 promise,vue 会用 setTimeout 兼容,现在已经不多了)
第二,nextTick 跟生命周期无关,你可以再任何生命周期调用它。
至于微任务和 DOM 渲染的关系,我感觉你还是有点困惑。但这个又一两句话说不清楚。
这门课程讲的非常深入 https://coding.imooc.com/class/chapter/400.html#Anchor ,我觉得你有必要参照大纲目录,了解一下。
老师,我回顾了一下基础面试课的event loop. 当call stack里面同步代码执行完成后,先遍历执行micro task queue里面的微任务,再去渲染DOM,接着执行event loop轮询callback queue里面的宏任务。我意识到自己把DOM结构的更新和DOM结构的渲染混为一谈了。 在回顾了老师之前讲的nextTick内容,老师您能不能看一下我理解对不对。 list里面的数据增加了三条后,是无法通过同步代码获取到DOM新增加的节点。因为Vue不仅仅是异步渲染的,还是异步更新的DOM。在list数据更新后,触发了list的setter函数,且这个list这个数据在模版中被使用过,依赖是被watcher收集过的,所以就会重新触发render函数,生成新的vnode,然后patch(vnode, newVnode),完成DOM更新。这时候执行微任务$nextTick,再渲染DOM。老师这样理解流程有问题吗?
没问题。
谢谢老师的解答
登录后可查看更多问答,登录/注册
面向1-3年前端的框架及项目面试“刚需内容”
4.1k 1
2.7k 11
1.3k 11
1.4k 11
1.2k 11