如何简单理解vue的NextTick

本文解释了Vue的nextTick方法如何利用JavaScript的事件循环机制,确保在组件渲染完成后执行异步操作,特别关注了其核心源码中的回调队列管理和异步方法优先级判断。
摘要由CSDN通过智能技术生成

它干啥的?

nextTick 中文意思:下一个敲击点。由于vue的响应式是异步的,那么当我们想在所有组件渲染结束后做一下“自己的事情”,所以就有了nextTick这个方法。这也就弥补了有一种情况mounted这个生命周期钩子满足不了需求,比如在子组件种操作父组件的dom,子组价的mounted就使不上劲啦。

核心是啥?

1.利用js的事件循环机制,2.源码主要判断当前设备环境支持的异步方法,回调函数放入数组中,当vue渲染结束,依次执行数组中存放的事件。

解释一下上面的知识点:

① JS 事件循环机制

 由于JS是单线程应用,所以按常理代码应该是自上到下依次执行。可是呢实际情况中会遇到异步的情况,比如开了一个定时器,请求了一个接口等。遇到这种情况,JS会把这些事件先放到一个地方存起来。后面继续执行任务,如果再遇到异步任务再存起来,等到从上到下的任务都执行结束,再依次执行存储的异步任务。异步任务分为宏任务和微任务。放入不同的地方存起来,执行顺序是先微任务再宏任务。

那“循环”体现在哪?

循环就是:当发现当线程的执行的任务结束,如果没有宏任务,取出队列的异步任务执行,然后再走到“当发现当线程的执行的任务结束”。循环至队列中的异步任务结束。

网上下的图,侵权必删

② 方法逻辑和核心源码

逻辑:主要逻辑就是由于js的事件循环机制,当我们想在dom渲染结束之后做一些事情,那么声明一个方法,把要做事情当做参数,然后创建异步任务,利用事件循环再执行那些事情。

核心源码:nextTick 方法参数是一个函数,把这个函数放入callbacks 数组中,优雅降等级判断设备支持的异步方法。优先级为:promise > MutationObserver > setImmediate>setTimout()。flushCallbacks利用当前支持的异步方法执行nextTick存储的任务,

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中的$nextTick方法用于在下次DOM更新循环结束之后执行延迟回调。它可以用于确保在DOM更新后再执行一些操作,比如访问更新后的DOM元素或执行其他依赖于DOM更新后的操作。使用$nextTick方法可以确保在对视图进行操作之前,视图已经更新完毕。 使用$nextTick方法很简单,在Vue实例中可以直接通过this.$nextTick来调用。你可以将需要在DOM更新后执行的代码放在$nextTick的回调函数中。当DOM更新循环结束后,Vue会自动调用这个回调函数。 下面是一个使用$nextTick方法的示例: ```javascript // 在vue实例中调用$nextTick方法 this.$nextTick(() => { // 在DOM更新后执行的代码 // 可以访问更新后的DOM元素或执行其他操作 }); ``` 在上面的示例中,回调函数会在DOM更新循环结束后执行。你可以在回调函数中编写需要在DOM更新后执行的代码逻辑。 需要注意的是,$nextTick方法是异步执行的,所以回调函数中的代码会在主线程执行完成后才会被调用。这样可以确保在DOM更新完成后再执行相关操作。 总结起来,Vue的$nextTick方法可以用于确保在DOM更新后再执行一些操作,它是一个非常有用的工具。通过将需要在DOM更新后执行的代码放在$nextTick的回调函数中,我们可以保证在对视图进行操作之前,视图已经更新完毕。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vue中$nextTick的用法(视图渲染完,操作dom)](https://blog.csdn.net/muzidigbig/article/details/85317387)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [vue中nextTick()的理解及使用](https://blog.csdn.net/weixin_42333548/article/details/102606546)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值