Vue组件Refs全面用法指南:直接访问组件实例与DOM节点
Vue 的 ref 必须绑定在模板的具体元素或组件标签上,组件挂载后方可安全使用。它主要用于访问原生 DOM 节点或子组件实例,并支持聚焦、滚动、尺寸测量以及调用通过 expose 暴露的方法。

Vue 的 ref 是访问组件实例与 DOM 节点最直接、最可控的方式,但并非万能钩子,正确把握使用时机与方法才能真正发挥其作用。
先从基础说起。ref 绑定的规则并不复杂,牢记以下三个关键点即可。
第一,ref 必须绑定在模板中的具体元素或组件标签上,名称需唯一且符合变量命名规范。例如,为普通 DOM 元素绑定 ,即可获取原生 DOM 节点;为自定义组件绑定 ,则可获得该组件的实例,包括其 methods 和通过 expose 暴露出的内容。
第二,避免直接在 v-for 生成的多个同名 ref 上使用,因为值会被覆盖。若需批量操作,建议改用 ref 函数或配合 querySelectorAll 处理。
总结:绑定要找准位置,命名要规范,批量操作要换思路。
那么,何时才能安全使用 ref?
答案是:只能在组件挂载之后。ref 对应的值在组件挂载后才由 Vue 注入,渲染前访问只能得到 null 或 undefined。具体到不同 API,用法略有差异:
- 选项 API:需在
mounted()钩子内使用this.$refs.xxx引用。 - 组合 API(
setup):先声明const xxx = ref(null),再在onMounted中读取xxx.value。 - 切记:不要在
created或beforeMount中尝试读取,因为 DOM 尚未生成,读取无效。
一句话总结:时机正确、方法得当,ref 才能真正派上用场。
在实际开发中,最常见的应用场景包括聚焦、滚动和尺寸测量。这些操作无需任何第三方库,直接使用 ref 即可实现:
- 让输入框自动获得焦点:
this.$refs.inputEl.focus() - 滚动到底部:
this.$refs.listEl.scrollTop = this.$refs.listEl.scrollHeight - 获取元素宽高位置:
this.$refs.boxEl.getBoundingClientRect()
注意:这些操作不会触发 Vue 的响应式更新,也不受 Vue 监控,属于纯粹的 DOM 行为。简单来说,就是直接操作底层,框架不干涉。
再介绍一个高阶用法:通过 ref 调用子组件的方法。
这本质上是打破单向数据流的临时通道,适用于强耦合、明确控制的场景。但需注意边界:
- 子组件必须显式暴露方法。Vue3 使用
defineExpose,Vue2 默认全部公开。 - 父组件调用时,写法如下:
this.$refs.childComp.submitForm()或childRef.value?.submitForm()。 - 务必避免在子组件内部频繁监听父 ref 的变化,这并非响应式机制,也不推荐反向依赖。
- 一旦通信变得复杂(如多层嵌套或事件分散),应优先考虑
emit、provide/inject或状态管理方案。
总结:ref 是一把利器,用得好坏取决于时机与边界。瞄准目标、规范使用,它将成为你最得心应手的工具。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
checked表单属性与CSS变量实现换肤原理
先聊一个有意思的现象:不需要编写任何 JavaScript,仅靠一个 :checked 伪类,就能驱动整个主题切换系统。听起来很神奇,但原理其实并不复杂——核心在于,:checked 是浏览器原生状态的实时镜像,而不是 JS 模拟出来的开关。 用户点击 ,或者用键盘空格键选中它,状态更新的那一刻,C
HTML meta标签页面定时跳转实现
说到前端开发中最简洁的页面跳转方式,meta http-equiv= "refresh " 绝对算得上一个经典方案。不过别看它结构简单,格式上稍有疏忽,页面就可能原地卡死,或者直接跳到一个错误地址。下面把几个最容易踩坑的细节彻底讲清楚,帮你避开这些常见陷阱。 使用 http-equiv= "refresh
Cypress跨测试用例状态传递的不推荐但可选方案
Cypress 默认的设计哲学很干脆:每个测试用例都必须是独立小王国,谁也不靠谁。这意味着 it() 执行前,浏览器上下文会被“一键还原”——页面状态、LocalStorage、Cookies 统统清空,强制维护测试隔离。这一规则让很多新手头疼:明明前一个测试已经创建了员工,后一个测试怎么就没法直接
全面深度解析HTML主体main标签唯一性原则与使用规范
在进行前端无障碍审计时,不少开发者会遇到一个奇怪的场景:浏览器不报错,但Lighthouse却直接标红“duplicate-main”。这其实是语义层与渲染层之间的根本差异。 为什么浏览器不报错但 Lighthouse 直接标红 duplicate-main 关键原因就在于:`main` 是语义锚点
HTML main标签在文档结构中的唯一性详解
先做一个快速检测:打开你最近开发的一个页面,按下 Ctrl+F 搜索 。如果搜索结果里出现2个以上,那这篇文章建议你认真读完。 本期要聊的主题,是HTML标签中一个看似简单、实际极易踩坑的核心知识点:main标签的唯一性。很多开发者知道这个标签的存在,但真正写到项目里,尤其是用了React、Vue这
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2026-07-02 06:55
2026-07-02 06:54
2026-07-02 06:54
2026-07-02 06:54
2026-07-02 06:54
2026-07-02 06:54
2026-07-02 06:54
2026-07-02 06:54
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

