Vue 中 ref 的正确使用时机与方式 ref 必须绑定在模板的具体元素或组件上,挂载后才可用,用于访问 DOM 节点或子组件实例,支持聚焦、滚动、尺寸测量及调用暴露的方法。 Vue 的 ref 是访问组件实例和 DOM 节点最直接、最可控的方式,但它不是“万能钩子”,用对时机和方式才真正有效。
ref 的正确使用时机与方式ref 必须绑定在模板的具体元素或组件上,挂载后才可用,用于访问 DOM 节点或子组件实例,支持聚焦、滚动、尺寸测量及调用暴露的方法。

Vue 的 ref 是访问组件实例和 DOM 节点最直接、最可控的方式,但它不是“万能钩子”,用对时机和方式才真正有效。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
我们先从基础说起。ref绑定其实不复杂,记住三个关键点就行。
第一,它必须写在模板中具体的元素或组件标签上,名称要唯一且符合变量命名规范。比如,给普通 DOM 元素绑定:,就能获取原生的 DOM 节点;给自定义组件绑定:,就能获取该组件的实例——包括它的 methods 和通过 expose 暴露出来的内容。
第二,不能直接写在 v-for 生成的多个同名 ref 上,因为后者的值会被覆盖。如果确实需要批量操作,推荐改用 ref 函数或配合 querySelectorAll 来处理。
三句并一句:绑定要找准位置,命名要规范,批量操作要换思路。
那么,什么时候能安全使用 ref 呢?
答案是:只能在组件挂载之后。ref 对应的值是在组件挂载后才被 Vue 注入的,渲染前访问,拿到的只能是 null 或 undefined。具体到不同 API,用法稍有区别:
mounted() 钩子里,用 this.$refs.xxx 来引用。setup):先声明 const xxx = ref(null),然后在 onMounted 里读取 xxx.value。created 或 beforeMount 中尝试读取——DOM 还没生成呢,读了也是白读。一句话总结就是:时机要对,方式要对,工具才能派上用场。
实际操作中,最常见的场景就是聚焦、滚动和尺寸测量。这些操作不需要任何额外库支持,直接用 ref 就能搞定:
this.$refs.inputEl.focus()this.$refs.listEl.scrollTop = this.$refs.listEl.scrollHeightthis.$refs.boxEl.getBoundingClientRect()不过要注意:这些操作不会触发 Vue 的响应式更新,也不会被它监控,属于纯粹的“DOM 行为”。说白了,就是直接操作底层,框架管不着。
再说一个高阶用法:通过 ref 调用子组件的方法。
这本质上是打破单向数据流的“临时通道”,适用于强耦合、明确控制的场景。但凡事有边界:
defineExpose,Vue2 则默认全部公开。this.$refs.childComp.submitForm() 或 childRef.value.submitForm()。emit、provide/inject 或状态管理方案了。总结一下:ref 是利器,但用得好不好,关键看时机和边界。瞄准了、用对了,它就是你最得心应手的工具。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述