onUpdated 在组件更新并重新渲染 DOM 后执行,适用于焦点管理、滚动同步、第三方库重绘等场景;需避免修改响应式数据以防死循环,配合 onBeforeUpdate 可实现状态保存与恢复。
onUpdated 用于在组件完成更新并重新渲染 DOM 后执行逻辑,适合处理依赖最新 DOM 状态的操作,比如焦点管理、滚动同步、第三方库重绘等。
它在响应式数据变化 → 虚拟 DOM 重新渲染 → 真实 DOM 更新完成后触发。注意:
典型需求是“DOM 更新后做点事”,例如:
写法示例(<script setup>):
import { ref, onUpdated } from 'vue'const messages = ref([])const inputRef = ref(null)onUpdated(() => {// 消息列表更新后,滚动到底部const container = document.querySelector('.message-list')if (container) {container.scrollTop = container.scrollHeight}// 输入框显示后自动聚焦(配合 v-if)if (inputRef.value && messages.value.length > 0) {inputRef.value.focus()}})
实际开发中容易出错的地方:
if (el?.offsetHeight),防止 SSR 渲染或条件渲染未就绪useDebounce)包裹逻辑两者常成对出现,形成“更新前记录状态 → 更新后恢复/应用”模式:
onBeforeUpdate:保存滚动位置、选中范围、光标偏移量onUpdated:恢复滚动、重置光标、重新聚焦例如表格编辑时保持行内输入框焦点:
let lastFocusedInput = nullonBeforeUpdate(() => {lastFocusedInput = document.activeElement})onUpdated(() => {if (lastFocusedInput?.matches('.editable-input')) {lastFocusedInput.focus()}})
tlwdr7650路由器没有wps按钮(tlwdr7650路由器没有wps按钮怎么办)
tlwdr7632扩展器电脑怎么设置(tlwdr7632扩展器电脑设置方法)
tlwda6332re安装教程(tlwda6332re如何安装)
tlwdr7632扩展器手机怎么设置(tlwdr7632扩展器手机设置方法)
tlxdr3010怎么设置网速快(tlxdr3010网速快设置方法)
tlwdr5620易展版怎么克隆(tlwdr5620易展版克隆方法)