我有一个问题,而访问DOM使用Vue3挂载挂钩。
我注意到在挂载的钩子上使用getElementById
或getElementByClassName
方法返回undefined,而使用querySelector
方法返回DOM。
经过一些研究,我发现我们应该使用nextTick
或asynchronous operations
来访问挂载挂钩中的DOM。
挂载的钩子本身不就意味着DOM已经挂载了吗?
为什么我需要使用asynchronous operations
或nextTick
来获取挂载挂钩内的DOM?
另外:我想知道getElementById
和getElementByClassName
的区别?为什么我可以通过getElementById
获得挂载挂钩上的DOM,但我不能通过getElementByClassName
。
enter image description here
enter image description here
1条答案
按热度按时间kupeojn61#
如果您想确保DOM反映您的数据,请使用nextTick。
nextTick接受一个回调函数,该函数会延迟到下一个DOM更新周期。这只是Vue的说法,如果你想在确保DOM已经更新后执行一个函数,请使用nextTick”。
因此,这一切都是关于在挂载的钩子内访问DOM之前确保DOM的存在,这是一种消除一些不需要的输出(即未定义)的有用方法。
在下面的示例中,当使用nextTick函数更改数据时,Vue将等待更新DOM,然后再向浏览器显示值3。
有很多写得很好的博客用很好的例子来解释nextTick和异步队列操作。
我建议你挺过去-