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


Posted in Javascript onAugust 25, 2017

本文主要给大家介绍了关于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 更新完成后就会调用。

总结

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

Javascript 相关文章推荐
JQuery插件ajaxfileupload.js异步上传文件实例
May 19 Javascript
jQuery将表单序列化成一个Object对象的实例
Nov 29 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
Apr 24 Javascript
简单实现vue验证码60秒倒计时功能
Oct 11 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
Jul 28 Javascript
深入理解Vue.js轻量高效的前端组件化方案
Dec 10 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
Sep 11 Javascript
vue 设置 input 为不可以编辑的实现方法
Sep 19 Javascript
微信小程序可滑动月日历组件使用详解
Oct 21 Javascript
vue+koa2搭建mock数据环境的详细教程
May 18 Javascript
基于js实现判断浏览器类型代码实例
Jul 17 Javascript
vuex中store存储store.commit和store.dispatch的用法
Jul 24 Javascript
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 #jQuery
JS中利用swiper实现3d翻转幻灯片实例代码
Aug 25 #Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
Aug 25 #Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
Aug 25 #Javascript
JavaScript数据类型的存储方法详解
Aug 25 #Javascript
使用JQ完成表格隔行换色的简单实例
Aug 25 #Javascript
Vue.js实现网格列表布局转换方法
Aug 25 #Javascript
You might like
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
php导出excel格式数据问题
2014/03/11 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
jQuery的强大选择器小结
2009/12/27 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
详解Node.js中的Async和Await函数
2018/02/22 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
详解python的webrtc库实现语音端点检测
2017/05/31 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
政法大学毕业生自荐信范文
2014/01/01 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
仓库管理员岗位职责
2014/03/19 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
解除劳动合同证明书
2014/09/26 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫