请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师关于nextTick是微任务

老师我看到本章的问答中,你有说它是微任务是基于promise实现的。
但也有说它就是一个setTimeout,有点困惑,它到底是宏任务还是微任务呢
1: 根据nextTick会在DOM渲染后被触发,我猜测它应该是个宏任务,不知道对不对?

2: 老师请问nextTick回调是在哪个生命周期函数里面执行的?

正在回答

1回答

双越 2021-10-02 08:15:21

第一,nextTick 是微任务(除非浏览器不支持 promise,vue 会用 setTimeout 兼容,现在已经不多了)

第二,nextTick 跟生命周期无关,你可以再任何生命周期调用它。


至于微任务和 DOM 渲染的关系,我感觉你还是有点困惑。但这个又一两句话说不清楚。

这门课程讲的非常深入 https://coding.imooc.com/class/chapter/400.html#Anchor ,我觉得你有必要参照大纲目录,了解一下。

0 回复 有任何疑惑可以回复我~
  • 提问者 weixin_慕丝2377090 #1
    老师,我回顾了一下基础面试课的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。老师这样理解流程有问题吗?
    回复 有任何疑惑可以回复我~ 2021-10-02 14:31:49
  • 双越 回复 提问者 weixin_慕丝2377090 #2
    没问题。
    回复 有任何疑惑可以回复我~ 2021-10-02 22:44:17
  • 提问者 weixin_慕丝2377090 回复 双越 #3
    谢谢老师的解答
    回复 有任何疑惑可以回复我~ 2021-10-02 22:45:25
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信