当前位置: 首页 > Web前端 > HTML

我对Vue.nextTick()的正确使用的理解

时间:2023-04-02 20:27:50 HTML

关于作者的程序开发者,不局限于语言和技术,目前主要从事PHP和前端开发,使用Laravel和VueJs,使用Apicloud混合开发在App端。合身、够用才是最完美的追求。个人网站:http://www.linganmin.cn最近写了一个手机在线播放的H5电影站:http://www.ifilm.ltd什么是Vue.nextTick()官方文档解释如下:在下一个DOM更新循环完成后执行延迟回调。修改数据后立即使用此方法获取更新后的DOM。我理解的官方文档中这句话的重点是在后半句获取更新的DOM。获取更新的DOM的含义是什么操作需要使用更新的DOM而不能使用之前的DOM或者使用更新前的DOM可能是DOM有问题,所以导出了这个Vue获取更新DOM的方法.所以Vue.nextTick()回调函数中执行的应该是会对DOM进行操作的js代码,比如varswiper=newSwiper('.swiper-container',{pagination:'.swiper-pagination',nextButton:'.swiper-button-next',prevButton:'.swiper-button-prev',paginationClickable:true,spaceBetween:30,centeredSlides:true,autoplay:2500,autoplayDisableOnInteraction:false});当需要使用Vue.nextTick()时,你在Vue生命周期的created()钩子函数中执行的DOM操作必须放在Vue.nextTick()的回调函数中。是什么原因?原因是在执行created()钩子函数的时候DOM实际上并没有进行任何渲染,此时再进行DOM操作是徒劳的,所以这里必须将DOM操作的js代码放到Vue中。在nextTick()的回调函数中。与之对应的是mounted钩子函数,因为在执行钩子函数时,所有的DOM挂载和渲染都已经完成,此时在钩子函数中进行任何DOM操作都不会出现问题。数据变化后要执行的一个操作,当这个操作需要用到随数据变化而变化的DOM结构时,这个操作要放到Vue.nextTick()的回调函数中。原因是Vue异步执行dom更新。一旦观察到数据变化,Vue就会开启一个队列,然后将在同一个事件循环(eventloop)中观察数据变化的watcher推入这个队列。如果这个观察者被多次触发,它只会被推送到队列中一次。这种缓冲行为可以有效去除重复数据导致的不必要的计算和DOm操作。在下一个事件循环中,Vue将清除队列并执行必要的DOM更新。当你设置vm.someData='newvalue'时,DOM不会立即更新,而是在异步队列清空时进行必要的DOM更新,即在下一个事件开始时进行更新环形。如果此时你想根据更新后的DOM状态做一些事情,就会出现问题。.要等待Vue在数据更改后完成更新DOM,请在数据更改后立即使用Vue.nextTick(callback)。这样回调函数就会在DOM更新完成后被调用。安晓霞同学