vue function (i)第一次点击不执行_vue下$nextTick及原理浅析

vue->$nextTick

引用官方的话:为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用 Vue.nextTick(callback)

  • ex1
<div><button @click="add">add</button><div ref="tagName">{{name}}</div>
</div>
data () {return {name: merlo}
}
methods: {add() {this.name = 'iron man'console.log(this.$ref['tagName'].innerHTML) // 仍然是merlothis.$nextTick((v) => {console.log(this.$ref['tagName'].innerHTML) // 已经变成iron man})}
}
  • ex2
<div><button @click="add">add</button><div ref="tagName" :style="css">{{info}}</div>
</div>
data() {return {css: { height: '666px'}}
}
methods: {add() {this.css = { height: '666666px' }console.log(this.$ref['tagName'].offsetHeight) // 依然666pxthis.$nextTick((v) => {console.log(this.$ref['tagName'].offsetHeight) // 变成666666px})}
}

相关原理

在 Vue 2.4 之前都是使用的 microtasks,但是 microtasks 的优先级过高,在某 些情况下可能会出现比事件冒泡更快的情况,但如果都使用 macrotasks 又可能会出现 渲染的性能问题。所以在新版本中,会默认使用 microtasks,但在特殊情况下会使用 macrotasks,比如 v-on。

macrotasks: microtasks的作用是用来调度应在当前执行的脚本执行结束后立即执行的任务。 例如响应事件、或者异步操作,以避免付出额外的一个task的费用。

  • I/O
  • setTimeout
  • setInterval
  • setImmediate
  • requestAnimationFrame
  • UI rendering

microtasks: 就是常说的任务队列task queue,作用是为了让浏览器能够从内部获取javascript / dom的内容并确保执行栈能够顺序进行。

  • process.nextTick
  • Promises
  • Object.observe
  • MutationObserver

ex:

setTimeout(function(){console.log(1)},0);new Promise(function(resolve){console.log(2)for( var i=100000 ; i>0 ; i-- ){i==1 && resolve()}console.log(3)}).then(function(){console.log(4)});console.log(5);// 以上打印结果 2,3,5,4,1

tip:

Microsoft Edge, Firefox 40, iOS Safari 以及 desktop Safari 8.0.8 中setTimeout会先于Promise

参考资料: - macrotask within an event loop context - 知乎-Promise的队列与setTimeout的队列有何关联? - 通过microtasks和macrotasks看JavaScript异步任务执行顺序 - 阮一峰-JavaScript 运行机制详解:再谈Event Loop


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全球工业互联网十大最具成长性技术

来源&#xff1a;经济参考报为准确把握全球工业互联网战略方向&#xff0c;及时跟踪工业互联网创新动态及特征态势&#xff0c;前瞻研判工业互联网产业化重大布局&#xff0c;中国工业互联网研究院任近来调研走访了一批在工业互联网相关技术及产业方面具备领先水平和特色的骨干…

团队二阶段冲刺个人工作总结2

昨天干了什么&#xff1a;重新规划我们的程序&#xff0c;对一些功能进行取舍 今天准备干什么&#xff1a;对计算卡路里功能进行改进&#xff0c;对已经删除的功能对应的代码进行清除 遇到困难没有&#xff1b;暂无转载于:https://www.cnblogs.com/zzcs/p/5609177.html

python简单选择排序_python 选择排序

原博文 2018-09-21 23:46 − def select_sort(slist): for i in range(len(slist)): x i for j in range(i, len(slist)): if slist[j] < slist[x]: x j... 相关推荐 2019-12-06 14:02 − 学习提纲 生成指定范围的数值列表&#xff0c;语法格式如下&#xff1a; 生成一个包…

Matlab数据类型及预定义

Matlab数据类型 最新的版本会包括更多的类型。 因为Matlab是面向matrix的编程语言&#xff0c;所以&#xff0c;Matlab将任何一个变量都看作一个matrix。如果是一个数 就是1x1的矩阵。 matlab不需要预定义变量&#xff0c;但是 预定义变量可以使循环程序执行更快。 全局变量…

Nature解析中国AI现状,2030年能引领全球吗?

来源&#xff1a;机器之心《Nature》近日的一篇分析文章表示&#xff0c;中国的人工智能研究在质量上进步很快&#xff0c;但是在高影响的论文、人才和伦理上面还需要追赶美国。中国巨大的人口总量帮助人脸检测技术快速进步。中国不仅仅是世界上人口最多的国家&#xff0c;看起…

ubuntu命令模式中文乱码

ubuntu在命令行模式(ctrlaltf1)中文乱码&#xff0c;显示为一个个小方块 解决方法: 终端或者命令行里输入 sudo apt-get install zhcon 打开命令行窗口(ctrlaltf1)&#xff0c;输入: zhcon --utf8 --drvvga 但我输入之后显示报错&#xff0c;提示&#xff1a; “ERROR:z…

变量的存储类型(storage class)

变量的存储类型(storage class) 对于变量的存储类型&#xff0c;前面遇到过一些疑惑&#xff0c;再简单的在这里说一下。存储类型是指存储变量值的内存类型&#xff0c;它用来决定存储空间的大小。变量的存储类型决定着变量的存储器和作用域。有三个地方可以用于存储变量&#…

matlab绘图点、线条相关

各种颜色属性选项 选 项 意 义 选 项 意 义 ‘r’ 红色 ‘m’ 粉红 ‘g’ 绿色 ‘c’ 青色 32 ‘b’ 兰色 ‘w’ 白色 ‘y’ 黄色 ‘k’ 黑色 各种线型属性选项 选 项 意 义 选 项 意 义 ‘-’ 实线 ‘–’ 虚线 ‘:’ 点线 ‘-.’ 点划线 各种标记点属性选项 选 项 意 义 选 项…

centos7调节虚拟机字体_初次安装虚拟机中Ubuntu16.04系统设置的一些小问题(小白教程)...

也不知道是哪里操作有误&#xff0c;最开始安装成功我的界面是这个样子&#xff0c;之前第一次安装的时候忘记改语言&#xff0c;这次注意到了&#xff0c;直接安装的中文。看着中文实在太舒服&#xff0c;好像设置都变得简单了&#xff1f;一、切换中文输入法&#xff1a;系统…

用半机械器官,打开发育生物学领域的黑匣子

来源&#xff1a;中国生物技术网 随着自然发育中的组织一起生长的微型传感器一小群细胞是如何组织成为心脏、大脑或者肾脏等器官的&#xff1f;这一发育的关键时期&#xff0c;长期以来一直是发育生物学领域的黑匣子。部分原因是因为没有足够小且足够灵活的传感器在不损伤细胞的…

ubuntu切换root用户

ubuntu怎么切换到root用户&#xff0c;使用以下命令 su root 但对于一个刚安装好的Linux系统&#xff0c;输入密码后会提示密码错误&#xff0c;这是因为没有给root设置密码。 解决方法: 输入: sudo passwd root 输入密码&#xff0c;并确认密码。 重新输入命令&#xf…

在XML里的XSD和DTD以及standalone的使用

有关XML结构中的XSD和DTD以及standalone的使用 XmlDeclaration declare document.CreateXmlDeclaration("1.0", "utf-8", "yes"); yes为standalone的值&#xff0c; XML中声明中有个standalone standalone 用来表示该文件是否呼叫其它外部的文件…

matlab图像边缘检测分析

更多MATLAB图像处理视频请点击 http://study.163.com/course/courseMain.htm?courseId1003594013 所谓边缘是指其周围像素灰度有变化的那些像素的集合。边缘广泛存在于物体与背景之间、物体与物体之间、基元与基元之间。物体的边缘是由灰度不连续所反映的。基于边缘的…

python可以实现哪些功能_Python中实现机器学习功能的四种方法介绍

本篇文章给大家带来的内容是关于Python中实现机器学习功能的四种方法介绍&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。 在本文中&#xff0c;我们将介绍从数据集中选择要素的不同方法; 并使用Scikit-learn&#xff08;skl…

Nature子刊批判人工神经网络:先天结构比后天训练更重要,应该借鉴动物大脑...

来源&#xff1a;凹非寺人工神经网络可以从动物大脑中学到什么&#xff1f;最新一期Nature子刊上&#xff0c;就刊登了这样一篇文章。美国冷泉港实验室的神经科学家Anthony M. Zador&#xff0c;对当下人工神经网络的研究思路进行了深刻反思与批判&#xff1a;大多数动物行为不…

C++初始化vector<vector<int>>

假设dps是一个mn维的vector&#xff0c;则初始化dps为全零的方法为&#xff1a; vector<vector<int>> dps(m, vector<int>(n,0));

matlab的傅里叶变换

更多MATLAB图像处理视频请点击 http://study.163.com/course/courseMain.htm?courseId1003594013 图像变换&#xff1a; 更多MATLAB图像处理视频请点击 http://study.163.com/course/courseMain.htm?courseId1003594013 在 MATLAB 中&#xff0c;一般用二元函数…

python在另一个函数中使用其他函数的变量_在另一个函数中访问函数的变量,如function() . var in python...

我在寻找一种正确的方法来访问另一个函数中的函数变量时遇到了一些问题 . 我正在制作远程操作类工具&#xff0c;因此我需要处理接收的命令[如exit或nircmdc.exe或telnet等] . 下面的代码不完整&#xff0c;但它是核心&#xff1a; def regular(): global data datac.recv(1024…

笔记一 Redis基础

在cmd 命令中运行redis 运行redis命令 &#xff1a;redis-cli Reids数据结构初探 数据结构有五种 string(字符串)、 list(列表)、set&#xff08;集合&#xff09;、hash&#xff08;散列&#xff09;、zset(有序集合) redis各类型的简单介绍 和最基础的命令 1.string&a…

C++获取指向二维数组的首元素指针

假设一个二维数组int a[][4] { { 3, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };&#xff0c;获取指向其首个元素&#xff08;即3&#xff09;的指针方法为&#xff1a; int*pa[0]&a[0][0]*a; 说明&#xff1a; &#xff08;1&#xff09;二维…