关于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 相关文章推荐
javaScript同意等待代码实现心得
Jan 01 Javascript
jquery实现经典的淡入淡出选项卡效果代码
Sep 22 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
Jan 05 Javascript
基于BootstrapValidator的Form表单验证(24)
Dec 12 Javascript
bootstrap警告框使用方法解析
Jan 13 Javascript
原生JS实现跑马灯效果
Feb 20 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
Dec 28 Javascript
vue+iview 兼容IE11浏览器的实现方法
Jan 07 Javascript
Vue.js实现大转盘抽奖总结及实现思路
Oct 09 Javascript
详解Vue之事件处理
Jul 10 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
Jul 18 Javascript
vue整合百度地图显示指定地点信息
Apr 06 Vue.js
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 模拟 asp.net webFrom 按钮提交事件的思路及代码
2013/12/02 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
PHP如何使用Memcached
2016/04/05 PHP
centos 7.2下搭建LNMP环境教程
2016/11/20 PHP
php-msf源码详解
2017/12/25 PHP
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
2018/03/25 jQuery
nodejs初始化init的示例代码
2018/10/10 NodeJs
node-red File读取好保存实例讲解
2019/09/11 Javascript
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
Python中存取文件的4种不同操作
2018/07/02 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
pygame实现五子棋游戏
2019/10/29 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
python中str内置函数用法总结
2020/12/27 Python
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
水果花束:Fruit Bouquets
2017/12/20 全球购物
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
好书伴我成长演讲稿
2014/05/14 职场文书
学校教师安全责任书
2014/07/23 职场文书
会议接待欢迎标语
2014/10/08 职场文书
新年寄语2016
2015/08/17 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
教你如何让spark sql写mysql的时候支持update操作
2022/02/15 MySQL