当前位置:首页 > VUE

vue的ref实现

2026-03-08 17:50:45VUE

Vue 中 ref 的实现原理

Vue 的 ref 是一个用于获取 DOM 元素或组件实例的响应式引用。它通过创建一个响应式对象,将引用的值存储在 .value 属性中。

基本用法

在模板中通过 ref 属性标记元素或组件:

<template>
  <div ref="myDiv">Hello World</div>
  <ChildComponent ref="child" />
</template>

在脚本中通过 ref() 函数创建引用:

vue的ref实现

import { ref } from 'vue'

const count = ref(0)

实现机制

Vue 3 的 ref 实现基于 Proxy 和响应式系统:

  1. 当调用 ref(value) 时,会创建一个 RefImpl 实例
  2. 该实例将原始值包装在 .value 属性中
  3. .value 的访问和修改会被追踪,触发响应式更新

模板 ref 的特殊处理

当在模板中使用 ref 属性时:

vue的ref实现

  1. 在组件挂载后,对应的 DOM 元素或组件实例会被自动赋值给 this.$refs 对象
  2. 如果用在 v-for 内部,$refs 会是一个数组
  3. 组合式 API 中需要通过同名变量访问

类型定义

TypeScript 中的类型定义展示了 ref 的结构:

interface Ref<T> {
  value: T
}

与 reactive 的区别

  1. ref 可以包装基本类型(如 number, string)
  2. reactive 只能用于对象类型
  3. 模板中使用 ref 不需要 .value,脚本中需要
  4. ref 通过 .value 访问,reactive 直接访问属性

自定义 ref

可以通过 customRef 创建具有自定义行为的 ref:

import { customRef } from 'vue'

function useDebouncedRef(value, delay = 200) {
  return customRef((track, trigger) => {
    return {
      get() {
        track()
        return value
      },
      set(newValue) {
        clearTimeout(timeout)
        timeout = setTimeout(() => {
          value = newValue
          trigger()
        }, delay)
      }
    }
  })
}

性能考虑

  1. 避免过度使用模板 ref,优先考虑 props 和事件
  2. 大量使用 ref 可能影响性能,特别是在频繁更新的场景
  3. 组合式 API 中的 ref 比选项式 API 的 $refs 更灵活

常见使用场景

  1. 访问 DOM 元素进行直接操作
  2. 调用子组件的方法
  3. 表单输入的双向绑定
  4. 需要响应式的基本类型值
  5. 与第三方库集成时需要 DOM 引用

标签: vueref
分享给朋友:

相关文章

vue实现导航栏切图

vue实现导航栏切图

Vue 实现导航栏切图 使用 Vue Router 实现基础导航 在 Vue 项目中,可以通过 Vue Router 实现导航栏的路由切换。创建一个导航栏组件,并在其中使用 <router-li…

vue实现管道

vue实现管道

Vue 中实现管道(Pipe)功能 在 Vue 中可以通过过滤器(Filters)或计算属性(Computed Properties)实现类似管道的功能,将数据经过多个处理步骤后输出。 使用过滤器(…

vue实现xss

vue实现xss

XSS 攻击简介 XSS(跨站脚本攻击)是一种常见的安全漏洞,攻击者通过注入恶意脚本到网页中,当其他用户访问该页面时,脚本会在其浏览器中执行,可能导致数据泄露或会话劫持。 Vue 中的 XSS…

vue 实现excel

vue 实现excel

Vue 实现 Excel 功能 前端导出 Excel 使用 xlsx 库可以轻松实现前端 Excel 导出功能。安装依赖: npm install xlsx 导出 Excel 示例代码: impo…

vue实现tip

vue实现tip

Vue实现Tooltip的方法 使用Vue实现Tooltip可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML的title属性 在Vue模板中直接使用HTML的title属性是最简单的实…

vue sku 实现

vue sku 实现

Vue SKU 实现方案 在电商系统中,SKU(Stock Keeping Unit)是商品的最小库存单位,通常由多个属性组合而成(如颜色、尺寸等)。以下是基于 Vue 的实现方案。 数据结构设计…