Vue中的$nextTick有什么作用?

一、如何理解$nextTick

Vue官方给出的标准答案如下:

我的个人理解是,Vue在更新DOM的时候是异步的,只要数据发生变化,Vue就会开启一个异步更新队列,$nextTick就是等队列中所有的数据变化完成之后,再统一进行更新。

以下面这段简单的循环为例,在没有加$nextTick的情况下,只要循环走一次,也就是每当数据发生一次变化,Vue就会发起一个异步更新队列,这就意味着视图会被更新100次;但是有了$nextTick,就会等这个循环全部走完,得到最终的一个值再进行更新,视图这时候就只需要更新一次,所以$nextTick有性能优化的作用。

let num 
for(let i=0; i<100; i++){
    num = i
}

console.log(num)

二、使用场景

因为Vue采用的是数据驱动视图,不需要我们大量的进行DOM操作,但有时候还是会需要一些DOM操作,如果一个数据的依赖于另一个DOM的数据,当数据发生变化视图却没有更新,就需要使用$nextTick,所以具体使用场景有以下两种:

1.在数据发生变化之后,想要立刻得到更新后的DOM元素,需要用$nextTick进行异步操作

this.$nextTick(function () {
   // 想要进行的更新操作
})

2.在生命周期中的created()钩子进行DOM操作,也要用$nextTick

因为在created()钩子中,页面的DOM还没有渲染,是没有办法进行DOM操作的,可以把操作的代码放在$nextTick中,等DOM全部渲染完成后再进行操作

三、原理

$nextTick其实是对JS执行原理事件循环(EventLoop)的一种应用,通过利用Promise、setTimeout等原生JS方法来模拟对应的微/宏任务的实现,本质是为了利用JS的这些异步回调任务队列来实现Vue框架中自己的异步回调队列。

猜你喜欢

转载自blog.csdn.net/weixin_48082900/article/details/128596028
今日推荐