当前位置: 首页 > 编程笔记 >

关于Vue.nextTick()的正确使用方法浅析

松安民
2023-03-14
本文向大家介绍关于Vue.nextTick()的正确使用方法浅析,包括了关于Vue.nextTick()的正确使用方法浅析的使用技巧和注意事项,需要的朋友参考一下

本文主要给大家介绍了关于Vue.nextTick()的正确使用,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

什么是Vue.nextTick()

官方文档解释如下:

在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

我理解的官方文档的这句话的侧重点在最后那半句获取更新后的DOM,获取更新后的DOM言外之意就是什么操作需要用到了更新后的DOM而不能使用之前的DOM或者使用更新前的DOM或出问题,所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操作的 js代码,比如Swiper扩展包的

var swiper = new Swiper('.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就会开启一个队列,然后把在同一个事件循环 (event loop) 当中观察到数据变化的 watcher 推送进这个队列。如果这个watcher被触发多次,只会被推送到队列一次。这种缓冲行为可以有效的去掉重复数据造成的不必要的计算和DOm操作。而在下一个事件循环时,Vue会清空队列,并进行必要的DOM更新。

当你设置 vm.someData = 'new value',DOM 并不会马上更新,而是在异步队列被清除,也就是下一个事件循环开始时执行更新时才会进行必要的DOM更新。如果此时你想要根据更新的 DOM 状态去做某些事情,就会出现问题。。为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用 Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。

 类似资料:
  • 本文向大家介绍浅谈Vue.nextTick 的实现方法,包括了浅谈Vue.nextTick 的实现方法的使用技巧和注意事项,需要的朋友参考一下 这是一篇继event loop和MicroTask 后的vue.nextTick API实现的源码解析。 预热,写一个sleep函数 解释下sleep函数 async 函数进行await PromiseFn()时函数执行是暂停的,我们也知道现在这个Prom

  • 在 Java中,main() 方法是 Java 应用程序的入口方法,程序在运行的时候,第一个执行的方法就是 main() 方法。main() 方法和其他的方法有很大的不同。   每个类可以有也可以没有main方法。

  • 4.5 正确的关机方法 OK!大概知道开机的方法,也知道基本的指令操作,而且还已经知道线上查询了,好累呦! 想去休息呢!那么如何关机呢?我想,很多朋友在DOS的年代已经有在玩计算机了! 在当时我们关掉DOS的系统时,常常是直接关掉电源开关,而 Windows 在你不爽的时候,按着电源开关四秒也可以关机!但是在Linux则相当的不建议这么做! Why?在 Windows (非 NT 主机系统) 系统

  • 问题内容: 这个想法是使用更少的连接和更好的性能。连接是否随时终止? 对于另一个问题,是否打开新连接? 问题答案: 不,多路复用器不会过期。没有GetDatabase不会打开新连接。basics.md涵盖了所有内容 -特别是: 从GetDatabase返回的对象是便宜的直通对象,不需要存储。

  • 我有一个使用jquery mobile的应用程序,它由几个html页面组成,每个页面中都有几个jquery页面元素。在桌面浏览器上,一切正常,但当我把它加载到我的android设备(运行2.3)上时,第一个页面看起来很好,但只要你点击一个链接(比如从index.html)- 那么,是否有正确的方法在不同的html页面之间移动呢?我没有得到任何浏览器错误,所以一切似乎都工作正常,但没有jqm的样式或

  • 问题内容: 我正在尝试对表单中的某些字段使用get_or_create,但尝试这样做时却出现500错误。 其中一行如下所示: 对于以上代码,我得到的错误是: 问题答案: 从文档get_or_create中: 说明: 要评估相似性的字段必须在外部提及。其余字段必须包含在中。如果发生CREATE事件,则会考虑所有字段。 看起来你需要返回一个元组,而不是单个变量,请执行以下操作:

  • 本文向大家介绍浅谈Java中hashCode的正确求值方法,包括了浅谈Java中hashCode的正确求值方法的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是Java中hashCode的正确求值方法的相关内容,具体如下。 散列表有一项优化,可以将对象的散列码(hashCode)缓存起来,如果散列码不匹配,就不会检查对象的等同性而直接认为成不同的对象。如果散列码(hashCode)相等,才

  • 问题内容: 我正在开发一个Spring MVC应用程序,我想在控制器中处理多部分请求。在我 也传递的请求中,当前我正在使用该文件来获取参数,该方法看起来像, 上面的代码在我的服务中效果很好,并且文件在服务器端。现在我看到某处文件需要使用注释而不是。文件使用有什么错误吗?还是将来可能导致任何类型的错误? 问题答案: 与 file一起使用没错。 @RequestParam批注还可用于将“ multip