一、前言
二、概念:什么是 useTemplateRef?
将模板中的 ref 标识和 JavaScript 中的引用对象进行更明确的关联。
import { ref } from 'vue'const box = ref(null)Vue 3.5:import { useTemplateRef } from 'vue'const box = useTemplateRef('box')#模板:<div ref="box"> Vue3.5</div>#两者通过名称自动关联。
三、安装
npm install vue@latest
npm list vue
import { useTemplateRef } from 'vue'
四、应用场景
1. 操作 DOM 元素
<script setup>import { onMounted, useTemplateRef } from 'vue'const username = useTemplateRef('username')onMounted(() => { username.value.focus()})</script><template><input ref="username" placeholder="请输入用户名"></template>const username = ref(null)
2. 获取子组件实例
<script setup>function refreshData(){ console.log('刷新数据')}defineExpose({ refreshData})</script><script setup>import { useTemplateRef } from 'vue'const table = useTemplateRef('table')function reload(){ table.value.refreshData()}</script><template><Table ref="table"/><button @click="reload">刷新</button></template>
3. 配合 TypeScript 获得更好的类型推导
const chart = ref(null)
const chart = ref<HTMLCanvasElement | null>(null)
const chart = useTemplateRef<HTMLCanvasElement>('chart')
五、实际效果
六、技术分析
1. 降低 ref 的语义负担
2. 更适合大型项目规范化
3. 对 TypeScript 项目更加友好
七、总结
不只是增加功能,而是在持续优化开发体验,让 Vue 项目更容易维护、更适合大型应用。