使用getElementById访问DOM返回在Vue挂接的挂钩中未定义

mwngjboj  于 2022-12-14  发布在  Vue.js
关注(0)|答案(1)|浏览(189)

我有一个问题,而访问DOM使用Vue3挂载挂钩。
我注意到在挂载的钩子上使用getElementByIdgetElementByClassName方法返回undefined,而使用querySelector方法返回DOM。
经过一些研究,我发现我们应该使用nextTickasynchronous operations来访问挂载挂钩中的DOM。

挂载的钩子本身不就意味着DOM已经挂载了吗?

为什么我需要使用asynchronous operationsnextTick来获取挂载挂钩内的DOM?
另外:我想知道getElementByIdgetElementByClassName的区别?为什么我可以通过getElementById获得挂载挂钩上的DOM,但我不能通过getElementByClassName
enter image description here
enter image description here

kupeojn6

kupeojn61#

如果您想确保DOM反映您的数据,请使用nextTick。

nextTick接受一个回调函数,该函数会延迟到下一个DOM更新周期。这只是Vue的说法,如果你想在确保DOM已经更新后执行一个函数,请使用nextTick”。
因此,这一切都是关于在挂载的钩子内访问DOM之前确保DOM的存在,这是一种消除一些不需要的输出(即未定义)的有用方法。
在下面的示例中,当使用nextTick函数更改数据时,Vue将等待更新DOM,然后再向浏览器显示值3。

mounted() {
    // Vue updates the DOM to some value 3
    this.currentTime = 3;

    // then invokes the callback, updates the DOM to 2021, and 
    // finally gives control to the browser, which displays current 
    // year.

    this.$nextTick(() => {
        let date = new Date()
        this.currentTime = date.getFullYear()
    });
}

有很多写得很好的博客用很好的例子来解释nextTick和异步队列操作。
我建议你挺过去-

  1. https://blog.logrocket.com/understanding-nexttick-in-vue-js/
  2. https://www.educative.io/answers/how-to-use-the-vuenexttick-method-in-vue

相关问题