简单理解nextTick的使⽤和原理
VueJs 247
nextTick在开发过程中应⽤的也较少,原理上和vue异步更新有密切关系,对于
⾯试者考查很有区分度,如果能够很好回答此题,对⾯试效果有极⼤帮助。
答题思路
- nextTick是做什么的?
- 为什么需要它呢?
- 开发时何时使⽤它?抓抓头,想想你在平时开发中使⽤它的地⽅
- 下⾯介绍⼀下如何使⽤nextTick
- 原理解读,结合异步更新和nextTick⽣效⽅式,会显得你格外优秀
回答范例:
- nextTick是⽤于获取下次DOM更新刷新的使⽤函数。
- Vue有个异步更新策略,意思是如果数据变化,Vue不会⽴刻更新DOM,⽽是开启⼀个队列,把组件更新函
数保存在队列中,在同⼀事件循环中发⽣的所有数据变更会异步的批量更新。这⼀策略导致我们对数据的修
改不会⽴刻体现在DOM上,此时如果想要获取更新后的DOM状态,就需要使⽤nextTick。 - 开发时,⽐如我希望获取列表更新后的⾼度就可以通过nextTick实现。
- nextTick签名如下: function nextTick(callback?: () => void): Promise<void>
所以我们只需要在传⼊的回调函数中访问最新DOM状态即可,或者我们可以await nextTick⽅法返回的
Promise之后做这件事。 - 在Vue内部,nextTick之所以能够让我们看到DOM更新后的结果,是因为我们传⼊的callback会被添加到队列
刷新函数(flushSchedulerQueue)的后⾯,这样等队列内部的更新函数都执⾏之后,所有DOM操作也就结束
了,callback⾃然能够获取到最新的DOM值。