相关文章推荐
读研的作业本
·
EXCEL利用VBA自由控制图表绘图区大小_ ...
·
1 年前
·
长情的企鹅
·
Android ...
·
1 年前
·
鬼畜的小蝌蚪
·
Java小数和百分数互转-阿里云开发者社区
·
1 年前
·
咆哮的馒头
·
python ...
·
1 年前
·
Code
›
$nextTick原理深度解析
https://www.jianshu.com/p/8efa5cba7d07
有腹肌的苦瓜
1 年前
什么时候使用$nextTick
1、Vue⽣命周期的created()钩⼦函数进⾏的DOM操作⼀定要放在Vue.nextTick()的回调函数中,原因是在created()钩⼦函数执⾏的时候,DOM 其实并未进⾏任何渲染,⽽此时进⾏DOM操作⽆异于徒劳,所以此处⼀定要将DOM操作的js代码放进Vue.nextTick()的回调函数中。2、当项⽬中改变data函数的数据,想基于新的dom做点什么,对新DOM⼀系列的js操作都需要放进Vue.nextTick()的回调函数中
$nextTick()执行原理
Vue 在更新 DOM 时是异步执行的。只要侦听到数据变化,Vue 将开启一个任务队列,并缓冲在同一时间循环中发生的所有数据变更。如果同一个 watcher 被多次触发,只会被推入到队列中一次。(这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作是非常重要的)
然后,在下一个的事件循环“tick”中,Vue 刷新队列并执行任务队列 (已去重的) 工作。
Vue 在内部对异步队列尝试使用原生的 Promise.then(微任务)、MutationObserver 和 setImmediate,如果执行环境不支持,则会采用 setTimeout(fn, 0)(宏任务)代替。
二、JS 运行机制
JS 执行是单线程的,它是基于事件循环的。事件循环大致分为以下几个步骤:
所有
同步任务
都在
主线程上执行
,形成一个执行栈
主线程之外,还存在一个"任务队列"(task queue)。
只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。主线程不断重复上面的第三步。
推荐文章
读研的作业本
·
EXCEL利用VBA自由控制图表绘图区大小_vba 设置图表大小_Innerpeace_yu的博客-CSDN博客
1 年前
长情的企鹅
·
Android studio常用插件之行云流水coding-腾讯云开发者社区-腾讯云
1 年前
鬼畜的小蝌蚪
·
Java小数和百分数互转-阿里云开发者社区
1 年前
咆哮的馒头
·
python IMAP协议以及fetch指令 - 知乎
1 年前