Vue中nextTick的作用

104 阅读1分钟

一、什么是nextTick

官网定义

在下次 DOM 更新循环结束之后执行延迟回调。

在修改数据之后立即使用这个方法,获取更新后的DOM

可以理解成,Vue 在更新 DOM 时是异步执行的。当数据发生变化,Vue将开启一个异步更新队列,视图需要等队列中所有数据变化完成之后,再统一进行更新。

nextTick中可以在Vue更新后立刻获取到最新值

二、nextTick的作用

示例:

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

如果没有 nextTick 更新机制,那么 num 每次更新值都会触发视图更新(上面这段代码也就是会更新10万次视图),有了nextTick机制,只需要更新一次,所以nextTick本质是一种优化策略

三、nextTick的使用方式

第一个参数为:加入异步任务队列的回调函数(可以获取最近的DOM结构)

第二个参数为:执行函数上下文

 this.$nextTick(()=>{
     // 在这里获取dom更新后的值
 })

四、nextTick的使用场景

如果想要在修改数据后立刻得到更新后的DOM结构,可以使用Vue.nextTick()

1、在created生命同期里,想操作渲染后的视图(但还不存在)。 因在created执行时,DOM并未进行任何渲染,因此拿不到。 如非要等,可以在nextTick的回调函数中去操作。

 created(){
     this.$nextTick(()=>{
         在此操作子组件更新后的dom
     })
 }

2、在mounted生命同期表示所有的DOM都已挂载并渲染完成,在此钩子函数操作DOM几乎没有问题,但mounted可并没有承诺所有的子组件都一起被挂载,如果等所有整个视图全部渲染完毕也可以考虑使用nextTick代替mounted比较保险。

 mounted(){
     this.$nextTick(()=>{
         在此操作子组件更新后的dom
     })
 }

3、在使用第三方插件时,希望在Vue生成的某些DOM动态变化时去重新调用该插件也可以使用。

 mounted(){
     this.$nextTick(()=>{
     this.Toast("xxx")c
     })
 }