Vue3 模板引用 (ref):操作 DOM 与子组件实例 从入门到精通 📅 发布时间:2026/7/8 13:11:23 👁️ 浏览次数: 前言在 Vue 的数据驱动思想下我们通常通过修改数据来驱动视图更新避免直接操作 DOM。但在实际开发中总会遇到一些非 DOM 不可的场景比如获取输入框焦点、调用第三方库初始化画布、获取子组件的数据或方法等。这时候Vue 提供的模板引用ref就派上了用场。本文将带你系统学习 Vue3 中ref的核心用法、操作 DOM、获取/调用子组件实例、与reactive区别等知识点帮你彻底掌握模板引用写出更优雅的 Vue 代码。一、什么是模板引用 ref简单说ref是 Vue 提供的获取「真实 DOM 元素」或「子组件实例」的方式。它的核心作用获取原生 DOM 节点如 input、div、canvas获取子组件实例调用子组件方法、访问子组件数据配合生命周期函数执行 DOM 操作注意Vue3 中ref有两个含义响应式引用定义基础类型响应式数据模板引用获取 DOM / 子组件本文重点讲模板引用 ref二、基础用法获取并操作 DOM1. 使用步骤三步给元素添加ref名称在script setup中创建一个同名 ref 对象等 DOM 渲染后通过.value获取真实 DOM2. 实战获取 input 并自动聚焦template !-- 1. 给 DOM 添加 ref 属性 -- input typetext refinputRef placeholder自动聚焦 / /template script setup import { ref, onMounted } from vue // 2. 创建与 ref 同名的响应式变量 const inputRef ref(null) // 3. 在挂载完成后操作 DOM必须在 onMounted 中 onMounted(() { // 获取真实 DOMinputRef.value inputRef.value.focus() console.log(真实 DOM 元素, inputRef.value) }) /script✅关键点模板里的ref名称 script 里的变量名必须在onMounted生命周期后才能获取到 DOM访问方式ref对象.value三、进阶用法获取子组件实例调用方法/访问数据这是组件封装、组件通信的高频用法父组件可以通过ref获取子组件实例直接调用子组件方法、访问子组件数据。1. 子组件Child.vue必须用defineExpose暴露需要让父组件访问的内容Vue3 脚本 setup 默认封闭不暴露任何内容template div子组件内容{{ msg }}/div /template script setup import { ref } from vue // 子组件数据 const msg ref(我是子组件数据) // 子组件方法 const childFn () { alert(子组件方法被执行了) } // ✅ 必须暴露父组件才能获取 defineExpose({ msg, childFn }) /script2. 父组件使用template button clickcallChild调用子组件方法/button !-- 给子组件添加 ref -- Child refchildRef / /template script setup import { ref } from vue import Child from ./Child.vue // 子组件实例引用 const childRef ref(null) const callChild () { // 调用子组件方法 childRef.value.childFn() // 访问子组件数据 console.log(子组件数据, childRef.value.msg) } /script✅核心规则子组件必须用defineExpose暴露属性/方法父组件通过ref.value.xxx调用不要滥用能通过 props / emit 实现就不用 ref四、v-for 中的多个 ref 批量获取 DOMv-for循环生成的元素不能用单个 ref必须用函数 ref或数组 ref。实战批量获取列表 DOMtemplate ul li v-foritem in list :keyitem :refsetItemRef {{ item }} /li /ul /template script setup import { ref, onMounted } from vue const list ref([1, 2, 3, 4, 5]) // 存放所有 DOM 引用 const itemRefs ref([]) // 函数 ref自动把 DOM 推入数组 const setItemRef (el) { if (el) { itemRefs.value.push(el) } } onMounted(() { console.log(所有 li DOM, itemRefs.value) }) /script五、重要注意事项必看避免踩坑1. 访问时机不能在setup同步代码中直接访问必须在onMounted事件处理函数click 等nextTick2. 访问方式DOM / 组件实例 ref值.value不能直接用ref值3. 子组件必须暴露script setup的组件默认封闭必须用defineExpose暴露方法和数据4. 不要滥用能通过数据驱动就不操作 DOM能通过 props/emit 就不调用子组件实例六、常见面试题1. ref 和 reactive 的区别ref用于基础类型string/number/boolean DOM 引用reactive用于引用类型对象/数组2. 为什么要在 onMounted 中获取 ref因为 setup 执行时DOM 还没渲染必须等挂载完成。3. 父组件如何调用子组件方法子组件defineExpose父组件用ref获取实例ref.value.方法名()七、总结模板 ref 获取 DOM / 子组件实例用法ref名称→ 定义同名 ref →onMounted使用操作 DOMref.value.focus()等子组件必须defineExpose暴露v-for使用函数 ref批量存储结语模板引用ref是 Vue3 必备核心技能尤其在表单操作、第三方库集成、组件封装中高频使用。只要记住数据驱动优先ref 辅助就能写出规范、高效、易维护的代码。
深入解析dlopen:动态库加载的机制与实践 1. 动态库加载的两种方式 在C/C开发中,动态库(Dynamic Library)的使用是提升代码复用性和灵活性的重要手段。动态库加载主要分为隐式链接和显式链接两种方式,它们各有特点,适用于不同场景。 隐式链接是最常见的方式&am… 2026/3/31 2:55:48
解决打印机标签尺寸匹配问题 在开发应用程序时,经常会遇到与打印机相关的各种问题,尤其是当需要打印特定尺寸的标签时。如果您正在开发一个可以打印产品标签的应用,并且遇到标签尺寸不匹配的问题,那么本文将为您提供详细的解决方案。 问题背景 假设您正在与同事开发一个可以打印产品标签的应用。您需… 2026/3/31 2:55:48
如何在A100显卡上快速部署Wan2.1图生视频API(含FastAPI配置详解) 高性能显卡实战:A100部署Wan2.1图生视频API全流程解析 当NVIDIA A100显卡遇上Wan2.1图生视频模型,会碰撞出怎样的创意火花?作为当前最先进的生成式AI视频工具之一,Wan2.1凭借其14B参数的强大模型,正在改变内容创作的工… 2026/3/31 2:53:45
OpenClaw-部署流程 目录 一、环境准备和依赖安装 1、Nodejs和Git 2、安装Node.js环境 二、 三、部署OpenClaw 方案一:选 “Parallel Search (Free)”(最省心) 三、启动 OpenClaw 服务 选择:Keep current values 6、通过环境变量启用 Ollama… 2026/7/8 13:10:36
nmap-nse-vulnerability-scripts:用 NSE 做漏洞检测 文章目录nmap-nse-vulnerability-scripts:用 NSE 做漏洞检测1、这项目是干什么的2、脚本怎么工作3、适合什么场景用4、使用注意nmap-nse-vulnerability-scripts:用 NSE 做漏洞检测 这个项目在 GitHub 上拿到 624 Star。它由 nccgroup 维护,提… 2026/7/8 13:08:35
18.8万公里老现代车主真心话:第一瓶想退货,用完三瓶我道歉! 很多老车主应该都有这种同感:车子开了十几万公里,明明按时保养,车况却肉眼可见地变差。油门变肉、提速拖沓、低速换挡顿挫,尤其是市区跟车的时候,一窜一窜的特别闹心。遇到这种问题,不少人都会试试燃油清洗… 2026/7/8 13:08:35
【成都东软学院本科毕业论文】基于Spring Boot的安全航空订票平台的设计与实现 注:仅展示部分文档内容和系统截图,需要完整的视频、代码、文章和安装调试环境请私信up主。学生的技术与实现摘 要近些年航空业发展速度很快,远距离出行的时候,很多人都会优先选择飞机作为交通工具,互联网技术不断普及… 2026/7/8 13:08:35
汽车高音为什么要看材料和背腔结构?从FOCAL劲浪 TW Ultima聊起 省流摘要:很多人判断汽车音响时,会先听低频够不够猛、喇叭数量多不多,却容易忽略高音单元。高音负责空气感、泛音、细节和声场边缘,如果材料、磁路和背腔结构处理不好,声音很容易发亮、发刺,长时间听歌会累… 2026/7/8 13:06:33
2026PDF转Excel,实操指南:办公软件、免费在线、小程序完整操作教程 引言日常办公中,报表、单据、台账多以 PDF 格式分发,但数据整理、计算统计需要可编辑的 Excel 表格,PDF 转 Excel 成为高频办公需求。2026 年市面上存在本地办公软件、网页在线工具、微信小程序三类主流处理渠道,覆盖电脑、手机全… 2026/7/8 13:04:32
BetterNCM安装器:高效管理网易云插件的最佳选择 BetterNCM安装器:高效管理网易云插件的最佳选择 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件的繁琐安装流程而烦恼吗?BetterNCM安装器是… 2026/7/8 0:02:48
运动控制系统安全设置对比:ECI3808的3种限位保护与急停逻辑实现 运动控制系统安全机制深度解析:限位保护与急停逻辑的设计哲学在精密制造与自动化领域,运动控制系统的安全设计绝非简单的功能堆砌,而是一套融合了机械工程、电气原理和软件算法的防御体系。当一台数控机床以每分钟数万转的速度运转࿰… 2026/7/8 0:06:48
AI大模型应用开发:小白也能抓住的红利风口,收藏这篇入门指南! 文章指出,虽然微软等科技巨头在裁员,但英伟达等公司却在积极扩招AI相关人才,尤其是具身智能、仿真等领域。AI行业正在经历结构性调整,传统岗位被淘汰,而大模型应用开发等新岗位需求旺盛。对于想转行或学习AI的普通人来… 2026/7/8 0:10:49
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/7 11:26:57
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/7 11:26:58