为什么Vue使用异步的方式更新组件?
Vue 用异步方式更新组件,核心原因可以概括为:避免 “无效更新”,减少 DOM 操作次数,提升性能。
用通俗的话讲,就像你网购时,快递不会 “买一件发一件”,而是等你把购物车加完,统一发货 ——Vue 会等 “同一轮更新中所有数据变化都完成”,再一次性更新 DOM,而不是改一个数据就刷新一次页面。
先改完数据,再更新视图
当监听到数据变化时,不会同步更新DOM,而是会将其存入任务队列当中,等到异步微任务开始执行时批量更新DOM,减少了重复渲染、优化性能。
同时还提供了nextTick这个方法为开发者提供更新DOM后的操作入口,方便开发者对更新后的DOM进行处理。
误区!
比如在 Vue3 中,用 ref 创建的变量 res,当你给 res.value 赋值后,又立刻获取 res.value,拿到的是新值。
这里没有 “延迟更新” 的情况,因为这只是普通的对象属性操作,和 Vue 的响应式更新(比如触发组件重新渲染)是两回事。响应式更新是 “赋值后触发依赖更新”,但赋值本身是同步生效的。
js
import { ref } from 'vue'
const res = ref(0)
res.value = 100
console.log(res.value) // 直接输出 100(新值)