vue3.x教程-标签的ref属性,获取元素、组件 作者:马育民 • 2026-07-26 22:52 • 阅读:10001 # 介绍 模板上写 `ref="xxx"`,用来**获取 DOM 元素 / 组件实例**。 - 如果在普通的 `DOM` 元素上使用,引用指向的就是 `DOM` 元素 - 如果用在 `子组件` 上,引用就指向组件实例 ### 一句话理解 相当于标签的 `id` 属性,通过该属性可以获取该标签的DOM ### 应用场景 非空校验时,让控件获取焦点 # 例子 非空校验,如果为空时,让控件获取焦点 ``` 登录 用户名: 通过 ref 注册引用 密码: {{ msg }} ``` ### 关键要点 1. 标签中的 `ref="usernameRef"`,与 TS `const usernameRef = ref(null)`,名称必须对应; 2. 区分两类ref: - `const username = ref('')`:响应式数据(v-model绑定) - `const usernameRef = ref(null)`:DOM元素引用,规范上加 `Ref` 后缀防止重名; # 标签的 `ref` 属性 vs `ref()`函数 - 模板:`ref="xxx"` → **标记DOM/组件** - JS:`const a = ref()` → **响应式变量** 两者名字一样,用途完全不同,只是配合使用。 # 关键知识点 ### 2. 生命周期限制 - `setup` 执行阶段:DOM还没生成 → `ref.value = null` - **只能在 onMounted / onUpdated 内访问DOM** ### 3. v-if 陷阱 元素被 `v-if="false"` 销毁时,`ref.value` 自动变回 `null` ``` ``` show 切换 false → boxRef.value = null ### 4. v-show 区别 v-show只是css隐藏,元素仍存在,ref一直能拿到dom。 # 总结 1. 模板 `ref="变量名"`,JS创建同名 `ref(null)`; 2. 挂载后 `.value` 获取 DOM / 组件; 3. 获取子组件必须子组件 `defineExpose`; 4. v-for 需要函数ref收集多个元素; 5. 不要用ref直接操作DOM,优先Vue数据驱动。 原文出处:http://www.malaoshi.top/show_1GW3kUWoiOVS.html