当前位置: 首页
前端开发
Vue组件Refs全面用法指南:直接访问组件实例与DOM节点

Vue组件Refs全面用法指南:直接访问组件实例与DOM节点

热心网友 时间:2026-06-30
转载
Vue 的 ref 必须绑定在模板的具体元素或组件标签上,组件挂载后方可安全使用。它主要用于访问原生 DOM 节点或子组件实例,并支持聚焦、滚动、尺寸测量以及调用通过 expose 暴露的方法。

Vue 组件 Refs 应用:直接访问组件实例与 DOM 节点

Vue 的 ref 是访问组件实例与 DOM 节点最直接、最可控的方式,但并非万能钩子,正确把握使用时机与方法才能真正发挥其作用。

先从基础说起。ref 绑定的规则并不复杂,牢记以下三个关键点即可。

第一,ref 必须绑定在模板中的具体元素或组件标签上,名称需唯一且符合变量命名规范。例如,为普通 DOM 元素绑定 ,即可获取原生 DOM 节点;为自定义组件绑定 ,则可获得该组件的实例,包括其 methods 和通过 expose 暴露出的内容。

第二,避免直接在 v-for 生成的多个同名 ref 上使用,因为值会被覆盖。若需批量操作,建议改用 ref 函数或配合 querySelectorAll 处理。

总结:绑定要找准位置,命名要规范,批量操作要换思路。

那么,何时才能安全使用 ref?

答案是:只能在组件挂载之后。ref 对应的值在组件挂载后才由 Vue 注入,渲染前访问只能得到 nullundefined。具体到不同 API,用法略有差异:

  • 选项 API:需在 mounted() 钩子内使用 this.$refs.xxx 引用。
  • 组合 API(setup):先声明 const xxx = ref(null),再在 onMounted 中读取 xxx.value
  • 切记:不要在 createdbeforeMount 中尝试读取,因为 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 的变化,这并非响应式机制,也不推荐反向依赖。
  • 一旦通信变得复杂(如多层嵌套或事件分散),应优先考虑 emitprovide/inject 或状态管理方案。

总结:ref 是一把利器,用得好坏取决于时机与边界。瞄准目标、规范使用,它将成为你最得心应手的工具。

来源:https://www.php.cn/faq/2675988.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
checked表单属性与CSS变量实现换肤原理

checked表单属性与CSS变量实现换肤原理

先聊一个有意思的现象:不需要编写任何 JavaScript,仅靠一个 :checked 伪类,就能驱动整个主题切换系统。听起来很神奇,但原理其实并不复杂——核心在于,:checked 是浏览器原生状态的实时镜像,而不是 JS 模拟出来的开关。 用户点击 ,或者用键盘空格键选中它,状态更新的那一刻,C

时间:2026-07-02 06:55
HTML meta标签页面定时跳转实现

HTML meta标签页面定时跳转实现

说到前端开发中最简洁的页面跳转方式,meta http-equiv= "refresh " 绝对算得上一个经典方案。不过别看它结构简单,格式上稍有疏忽,页面就可能原地卡死,或者直接跳到一个错误地址。下面把几个最容易踩坑的细节彻底讲清楚,帮你避开这些常见陷阱。 使用 http-equiv= "refresh

时间:2026-07-02 06:54
Cypress跨测试用例状态传递的不推荐但可选方案

Cypress跨测试用例状态传递的不推荐但可选方案

Cypress 默认的设计哲学很干脆:每个测试用例都必须是独立小王国,谁也不靠谁。这意味着 it() 执行前,浏览器上下文会被“一键还原”——页面状态、LocalStorage、Cookies 统统清空,强制维护测试隔离。这一规则让很多新手头疼:明明前一个测试已经创建了员工,后一个测试怎么就没法直接

时间:2026-07-02 06:54
全面深度解析HTML主体main标签唯一性原则与使用规范

全面深度解析HTML主体main标签唯一性原则与使用规范

在进行前端无障碍审计时,不少开发者会遇到一个奇怪的场景:浏览器不报错,但Lighthouse却直接标红“duplicate-main”。这其实是语义层与渲染层之间的根本差异。 为什么浏览器不报错但 Lighthouse 直接标红 duplicate-main 关键原因就在于:`main` 是语义锚点

时间:2026-07-02 06:54
HTML main标签在文档结构中的唯一性详解

HTML main标签在文档结构中的唯一性详解

先做一个快速检测:打开你最近开发的一个页面,按下 Ctrl+F 搜索 。如果搜索结果里出现2个以上,那这篇文章建议你认真读完。 本期要聊的主题,是HTML标签中一个看似简单、实际极易踩坑的核心知识点:main标签的唯一性。很多开发者知道这个标签的存在,但真正写到项目里,尤其是用了React、Vue这

时间:2026-07-02 06:54
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜