nexttick(简单理解Vue.nextTick(callback))
本文目录
简单理解Vue.nextTick(callback)
可能你还没有注意到,Vue 在更新 DOM 时是异步执行的。只要侦听到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更。如果同一个 watcher 被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作是非常重要的。然后,在下一个的事件循环“tick”中,Vue 刷新队列并执行实际 (已去重的) 工作。Vue 在内部对异步队列尝试使用原生的 Promise.then、MutationObserver 和 setImmediate,如果执行环境不支持,则会采用 setTimeout(fn, 0) 代替。
例如,当你设置 vm.someData = ’new value’,该组件不会立即重新渲染。当刷新队列时,组件会在下一个事件循环“tick”中更新。多数情况我们不需要关心这个过程,但是如果你想基于更新后的 DOM 状态来做点什么,这就可能会有些棘手。虽然 Vue.js 通常鼓励开发人员使用“数据驱动”的方式思考,避免直接接触 DOM,但是有时我们必须要这么做。为了在数据变化之后等待 Vue 完成更新 DOM,可以在数据变化之后立即使用 Vue.nextTick(callback)。这样回调函数将在 DOM 更新完成后被调用。例如:
报错 TypeError: this.$refs.myWidth is undefined,因为每个组件实例都对应一个 watcher 实例,如果同一个 watcher 被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作是非常重要的。然后,在下一个的事件循环“tick”中,Vue 刷新队列并执行实际 (已去重的) 工作。Vue 在内部对异步队列尝试使用原生的 Promise.then、MutationObserver 和 setImmediate。异步更新的原因,所以此时没有p元素,所以拿不到p元素的属性。 ··· 该组件不会立即重新渲染。当刷新队列时,组件会在下一个事件循环“tick”中更新。多数情况我们不需要关心这个过程,但是如果你想基于更新后的 DOM 状态来做点什么,这就可能会有些棘手。虽然 Vue.js 通常鼓励开发人员使用“数据驱动”的方式思考,避免直接接触 DOM,但是有时我们必须要这么做。为了在数据变化之后等待 Vue 完成更新 DOM
nexttick原理是什么
nexttick原理实现响应式并不是数据发生变化之后DOM立即变化,而是按一定的策略进行DOM的更新。
同步任务执行完毕,开始执行异步watcher队列的任务,更新DOM。Vue在内部尝试对异步队列使用原生的Promise。then和MessageChannel方法,如果执行环境不支持,会采用setTimeout(fn,0)代替。
扩展资料:
vue在web开发、网站制作中的优势
1、据绑定:vue会根据对应的元素,进行设置元素数据,通过输入框,以及get获取数据等多种方式进行数据的实时绑定,进行网页及应用的数据渲染 。
2、组件式开发:通过vue的模块封装,它可以将一个web开发中设计的各种模块进行拆分,变成单独的组件,然后通过数据绑定,调用对应模版组件,同时传入参数,即可完成对整个项目的开发。
3、简单小巧的核心,渐进式技术栈,足以应付任何规模的应用。
Vue中的nextTick
1、nextTick是Vue提供的一个全局API,由于Vue的异步更新策略导致我们对数据的修改不会立刻体现,在DOM变化上,此时如果想要立即获取更新后的DOM状态,就需要使用这个方法。 2、Vue在更新DOM时是异步执行的。只要监听到数据变化,Vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更。如果同一个watcher被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和DOM操作是非常重要的。nextTick方法会在队列中加入一个回调函数,确保该函数在前面的DOM操作完成后才调用。 3、所以当我们想在修改数据后立即看到DOM执行结果就需要用到nextTick方法。 4、比如,在干什么的时候就会使用nextTick,传一个回调函数进去,在里面执行DOM操作即可。 5、 简单了解nextTick实现,它会在callbacks里面加入我们传入的函数,然后用timerFunc异步方式调用它们,首选的异步方式会是Promise。这让我明白为什么可以在nextTick中看到DOM操作的结果。
更多文章:
未来24小时卫星云图天气预报(请问小时天气预报的降雨量是如何计算的)
2024年8月25日 00:45
cpuidle(为什么在使用cpuidle时cpu利用率为100%)
2024年7月24日 10:56
怎样查看CF上的火力值?CF关掉的时候电脑右下角会出现火力值,怎样在关掉CF的时候不显示,顺便问一下火力值有什么用
2023年10月31日 23:15
滚蛋吧肿瘤君下载(普通人看《滚蛋吧,肿瘤君》与二十一岁癌症晚期患者看有什么不同的感受)
2024年1月24日 05:20
仓库管理常用软件免费(有哪些免费的仓库管理软件推荐,简单一些的)
2024年9月4日 01:20
mcafee virusscan(McAfee VirusScan 怎样设置才能达到最好的效果)
2023年10月12日 01:50
手机无法上网 错误码503 什么意思 应该怎么办?网站503错误是什么意思
2024年7月21日 11:42
htmltextarea(html 中textarea完整用法)
2024年1月10日 21:35
在线电子相册制作网站(请问哪有免费的、可翻页的电子相册制作网站)
2024年2月6日 23:35
“江湖那么大,无非一壶茶诗心梦中求,闭眼观天下”你怎么理解这句话?李中莹最近在心江湖网做的团购课程《NLP重塑心灵》是确实吗
2024年7月15日 04:36