开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情
大家好,我是林家少爷,是一位专注于前端技术,立志成为前端技术专家的热血青年。
从2023年2月17日开始,我决定开辟一个新的专栏【刷爆LeetCode】,每天至少刷一道LeetCode原题,并且使用Typescript和原生JS来编写代码。
今天是第5天ヾ(◍°∇°◍)ノ゙
没想到之前的月份居然全部写错了!!
掘金要重新审核太慢了,太不谨慎了,前面8天连续写错!!
现在写作时间是晚上23:06,还剩下一个小时作文时间。
此时此地我还在公司的机房,和一群服务器待在一起。
整间房子都是服务器运作的声音,呼出的热气,让整个房子暖的像个火炉一样。
一点都不像在春天。
此时此刻其实并没有在加班,只是在做我昨天刚接了一个小程序私单,赚点小钱嘻嘻(#^.^#)。
我爱钱,也爱生活,有钱能够更好地生活(*^▽^*)
今天在开发过程中,遇到了一个小挫折,看到项目中多处使用了nextTick,因为工期紧张的缘故(因为原本下周一就要提测的,我硬生生拖到周四,真不熟悉这套element-ui封装的框架,太多自定义的写法),照抄里面的代码,结果报错了,改了好几次还是报错,顿时挫败感满满,所以今天不拿下nextTick,是不打算回家了。
前言
众所周知,Vue的DOM更新操作时异步的,为了获取更新后的DOM,官方提供了相应的API nextTick,文档中对该API的描述为:将回调延迟到下次DOM更新循环之后执行,所谓的下一次,到底是哪一次呢?
DOM更新时异步任务,nextTick的回调也是异步任务,nextTick中的回调一定就能获取到最新的DOM吗?
要想回到以上问题,先来解决两个最基础的问题:
为什么会有nextTick这种东西存在
因为Vue采用的是【异步更新策略】,当监听到数据发生变化的时候,不会立即去更新DOM,而是开启一个任务队列,并缓存在同一个事件循环中发生的所有数据变更。
这种做法带来的好处就是可以将多次数据更新合并成一次,减少操作DOM的次数;
如果不采用这种方法,假设数据改变100次就要去更新100次DOM,而频繁的DOM更新是很消耗性能的。
nextTick的作用
nextTick接收一个回调函数作为参数,并将这个回调函数延迟到DOM更新后才执行;
nextTick的使用场景有哪些?
想要操作机遇最新数据生成的DOM时,就将这个操作放在nextTick的回调中。
nextTick实现原理
将传入的回调函数包装成异步任务,异步任务又分为微任务和宏任务,为了尽快执行所以优先选择微任务。
nextTick提供了四种异步方法:
Promise.then
MutationObserver
setImmediate
setTimeout(fn,0)
源码解读
我看了一下nextTick源码,并不复杂,三个函数,60多行代码,真的很精简。
我还在看,沉下心学习中,如无意外明天凌晨还会发一篇文章。
细讲nextTick源码。
现在写完今天的稿子,看时间,23:35,刚好写了半个小时。
好了,继续去完成私单的工作吧,今晚写完明天一手交钱一手交货。
有三个月没写小程序,技术生疏了,努力补课中。
要知道,我工作中写的第一行代码就是小程序的代码。
也是因为小程序,我才踏入了前端开发的大门。
还有好多故事想跟大家分享,像【摸鱼的春哥】一样,分享点我经历的开心的不开心的事情让大家开心一下,也不错!!
下期再见ヾ( ̄▽ ̄)ByeBye