this.$nextTick:获取更新之后的DOM
具体来说时获取异步更新之后的DOM,因为如果修改了DOM的显示或者隐藏后立刻要获取DOM元素是获取不到的,因为获取的代码时同步的,DOM的更新时异步的,同步代码执行完后才能执行异步代码,所以同步的获取代码执行的时候DOM还没有更新,异步代码执行完后才算一个渲染循环,最新的DOM元素在下一次渲染循环时才可以获取
而this.$nextTick就是获取下一次渲染循环时的DOM
解决场景:开始为了性能考虑使用v-if设置变量isShow默认为false隐藏一个div元素,然后等待数据获取到再把数据绑定到div中 就是设置isShow为true,注意此时DOM需要从无到有创建,这叫做DOM更新,更新是异步的所以即使获取到数据后改变变量为true也是同步的操作,div盒子不会在本次渲染循环中显示
使用this.$nextTick在回调函数中拿到最新的DOM,也就是下一次更新的DOM(不要过分解读)
注意一点:这个函数是异步的需要等到所有同步代码执行完毕后才会执行里面的回调
实际测试如下:
没有this.$nextTick:
加了this.$nextTick:
最后补充DOM更新原理是在微任务完成后更新DOM然后宏任务,具体同步异步可以看一下珠峰的相关视频讲的很细