Vue 3.5中useTemplateRef和ref的区别详解

 更新时间:2026年02月13日 10:19:02   作者:Hone  
在Vue3中ref是一个非常实用的函数,用于创建响应式数据,这篇文章主要介绍了Vue3.5中useTemplateRef和ref区别的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

useTemplateRefref 都是用来创建响应式引用(Reactive References)的,但在 Vue 3.5+ 中,useTemplateRef 是一个专门为模板引用(Template Refs)设计的组合式 API (Composable) 。让我们详细对比一下它们:

ref

  • 核心功能: ref 是 Vue 最基础的响应式系统 API 之一。它可以包装任何值(原始类型、对象、DOM 元素、组件实例等),使其成为响应式的。

  • 用途广泛:

    • 存储和响应式地更新本地组件状态(如 count = ref(0))。
    • 作为模板引用(虽然在 3.5+ 之前常用)。
    • 在任何需要响应式引用的地方。
  • 在模板引用中的用法 (旧方式) :

    <template>
      <div ref="divRef">Hello World</div>
    </template>
    
    <script setup>
    import { ref, onMounted } from 'vue';
    
    const divRef = ref(null); // 创建一个 ref
    
    onMounted(() => {
      // divRef.value 现在是 DOM 元素
      console.log(divRef.value); // <div>Hello World</div>
      divRef.value.focus(); // 例如,聚焦到元素上
    });
    </script>
    
    • 问题: 在 <script setup> 中,divRef 会暴露给模板,即使你只想在脚本内部使用它。这可能会污染模板的上下文。

useTemplateRef(Vue 3.5+)

  • 核心功能: 专门用于获取对模板中元素或组件的引用。它返回一个getter 函数,而不是一个 ref 对象。

  • 目的: 解决 ref 作为模板引用时暴露到模板上下文的问题,提供更清晰、更符合直觉的 API。

  • 用途: 用于模板引用。

  • 返回值: 一个 getter 函数,调用它会返回最新的模板引用值。这个函数本身是响应式的,但其返回值(即引用的元素或组件实例)不是。

  • 优势:

    • 不污染模板上下文: useTemplateRef 返回的 getter 不会被自动暴露到模板中,保持了模板上下文的整洁。
    • 意图明确: 使用 useTemplateRef 明确表示你正在创建一个模板引用,提高了代码的可读性。
    • 类型推断: 在 TypeScript 中,useTemplateRef 能提供更精确的类型推断。
  • 在模板引用中的用法 (新方式) :

    <template>
      <div ref="divRef">Hello World</div>
    </template>
    
    <script setup>
    import { useTemplateRef, onMounted } from 'vue';
    
    // useTemplateRef 返回一个 getter 函数
    const getDivRef = useTemplateRef('divRef');
    
    onMounted(() => {
      // 调用 getter 函数获取 DOM 元素
      console.log(getDivRef()); // <div>Hello World</div>
      getDivRef()?.focus(); // 例如,聚焦到元素上
    });
    </script>
    
    • 注意:在 ref 指令中使用的字符串(如 'divRef')必须与 useTemplateRef 的参数完全匹配。
    • getDivRef() 返回的是实际的 DOM 元素或组件实例,如果元素未挂载,则可能返回 nullundefined

对比总结

特性refuseTemplateRef
主要目的创建通用的响应式引用专门用于模板引用
返回值一个包含 .value 属性的 ref 对象一个 getter 函数
模板暴露会暴露到模板上下文(如果在 <script setup> 中定义)不会暴露到模板上下文
类型推断一般更好(尤其是在 TS 中)
意图表达通用,需看上下文明确
Vue 版本要求3.0+3.5+
何时使用通用响应式状态、旧项目中的模板引用Vue 3.5+ 项目中的模板引用 (推荐)

结论

  • 对于模板引用(获取 DOM 元素或子组件实例),强烈推荐在 Vue 3.5+ 项目中使用 useTemplateRef。它更清晰、更安全、类型更友好。
  • 对于通用的响应式状态管理(如计数器、布尔标志等),继续使用 ref
  • 在你的项目中,如果已经升级到了 Vue 3.5 或更高版本,并且需要获取模板引用,请优先考虑 useTemplateRef

到此这篇关于Vue 3.5中useTemplateRef和ref区别的文章就介绍到这了,更多相关Vue 3.5中useTemplateRef和ref区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue2中使用viewer.js的实现示例

    vue2中使用viewer.js的实现示例

    本文主要介绍了vue2中使用viewer.js的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-10-10
  • 如何为老vue项目添加vite支持详解

    如何为老vue项目添加vite支持详解

    Vite是一个开发环境工具,旨在提高我们的开发速度,下面这篇文章主要给大家介绍了关于如何为老vue项目添加vite支持的相关资料,需要的朋友可以参考下
    2021-09-09
  • vue写一个全局弹窗组件通过js调用的方法

    vue写一个全局弹窗组件通过js调用的方法

    弹窗效果是在Web开发中经常用到的一种交互效果,它可以在用户点击某个按钮或者触发某个事件时显示一个悬浮框,提供用户与页面进行交互的机会,这篇文章主要给大家介绍了关于vue写一个全局弹窗组件通过js调用的方法,需要的朋友可以参考下
    2024-06-06
  • vue如何通过点击事件实现页面跳转详解

    vue如何通过点击事件实现页面跳转详解

    页面跳转,我们一般都通过路由跳转实现,通常情况下可直接使用router-link标签实现页面跳转,下面这篇文章主要给大家介绍了关于vue如何通过点击事件实现页面跳转的相关资料,需要的朋友可以参考下
    2022-07-07
  • Vue3+Element Plus实现自定义弹窗组件的全屏功能

    Vue3+Element Plus实现自定义弹窗组件的全屏功能

    在现代化的前端开发中,弹窗组件是提升用户体验的重要元素,本文将介绍如何使用 Vue 3 和 Element Plus 库来创建一个具有全屏功能的自定义弹窗组件,文中通过代码示例讲解的非常详细,需要的朋友可以参考下
    2024-07-07
  • vue中mapbox地图显示一半的问题及解决方法

    vue中mapbox地图显示一半的问题及解决方法

    在vue中创建mapbox地图,地图只显示一般,查看浏览器开发者工具,发现将canvas.mapboxgl-canvas 的position:absolute去掉就解决了,今天小编通过本文给大家分享详细过程,感兴趣的朋友跟随小编一起看看吧
    2023-07-07
  • Vue两个通信方式与动画过度及混入使用介绍

    Vue两个通信方式与动画过度及混入使用介绍

    最近在写vue的一个项目要实现过渡的效果,虽然vue动画不是强项,库也多,但是基本的坑还是得踩扎实,下面这篇文章主要给大家介绍了关于Vue中实现过渡动画效果的相关资料,需要的朋友可以参考下
    2023-03-03
  • Vue3新特性Composition API实战指南

    Vue3新特性Composition API实战指南

    Vue3的发布标志着这个流行前端框架的重大升级,其中最引人注目的变化是引入了Composition API,本文将深入探讨Vue3的新特性,特别是Composition API的实际应用,帮助开发者掌握这一强大工具,需要的朋友可以参考下
    2025-07-07
  • vxe-table动态列筛选以及筛选项动态变化的问题及解决

    vxe-table动态列筛选以及筛选项动态变化的问题及解决

    这篇文章主要介绍了vxe-table动态列筛选以及筛选项动态变化的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • vue使用html2canvas和jspdf将html转成pdf

    vue使用html2canvas和jspdf将html转成pdf

    在前端开发中, html转pdf是最常见的需求,下面这篇文章主要给大家介绍了关于vue如何使用html2canvas和jspdf将html转成pdf的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03

最新评论