在https://v2.vuejs.org/v2/guide/reactivity.html#Async-Update-Queue中,文档告诉我们,如果您想在渲染后执行某些操作(例如获取元素的新宽度和高度)完成后,您应该在 的回调中执行此操作Vue.nextTick(callback)。但有几次我发现它不起作用(我不知道其他人是否也发现它有时不起作用)并且必须求助于setTimeout修复它。
我怀疑如何nextTick才能确保渲染完全完成。我阅读了源代码,发现它可能会使用Promise.then或setImmediate在. 我认为 dom 渲染可以在事件循环之间的任何时间发生。所以所使用的所有内部方法都不能保证新的渲染工作完成。setTimeout(cb, 0)nextTicknextTick
【注】我并不是要讨论打电话nextTick解决问题是否是一个好方法,这是另一个问题。我的观点是为什么它可以做它所提供的事情(dom渲染完成)。
有人能给我解释一下吗?谢谢。
小智 5
nextTick不保证DOM渲染完成,只保证DOM结构更新。
您可以使用类似于this.$refs.p.innerHTMLnextTick 回调中的内容来访问更新后的 DOM。但您可能还没有在屏幕上看到该内容。
nextTick将回调放入微任务队列中,在所有微任务完成后,浏览器将有机会渲染新内容。
如果您想等待内容显示在屏幕上,您可以使用setImmediate(仅限 IE) 或 ,setTimeout(fn, 0)它的优先级比渲染任务低,因此它将在新内容显示后执行。
请参阅此答案例如小提琴:
https ://forum.vuejs.org/t/does-nexttick-work-weirdly/42918/7
| 归档时间: |
|
| 查看次数: |
4410 次 |
| 最近记录: |