Vue.$nextTick

本文揭示了Vue中DOM更新的异步策略,讲解了$nextTick的作用,并通过示例演示了如何在数据批量修改后确保DOM正确更新。关键在于避免重复渲染,提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们都知道大多数情况下 Vue 数据变化后,相应的 html 也随着发生变化。事实上,当数据发生改变后,对应的 html/DOM 并没有立即重新渲染

而是开启一个队列,并将改变的数据缓存在同一事件循环中,当刷新队列时,组件会在事件循环队列清空时的下一个“tick”更新

如果同一个 watcher 被多次触发,或者如果你用一个for循环来动态改变数据100次,那么这些变化只会被推入到队列中一次。这种在缓存时去除重复数据对于避免不必要的计算和 DOM 操作上非常重要,否则将是一个很大的开销。

为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。

【demo1】: 点击按钮调用 add(),页面插入一个元素的同时返回列表dom的长度,发现返回的长度是修改前的旧的dom长度

上述代码浏览器点击效果如下:

解决方案:

将获取dom长度的逻辑放在 this.$nextTick() 回调函数中:

【demo2】: 在 add() 方法中批量修改数据:

解决方案:

将获取dom长度的逻辑放在 this.$nextTick() 回调函数中:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值