当前位置:首页 > VUE

vue3 ref实现

2026-02-22 20:05:36VUE

Vue3 中 ref 的实现原理

Vue3 的 ref 函数用于创建一个响应式引用对象,适用于基本类型或复杂类型的响应式处理。以下是其核心实现逻辑和使用方法。

ref 的基本用法

通过 ref 创建的响应式对象会返回一个带有 value 属性的对象,访问或修改数据需要通过 .value 操作。

import { ref } from 'vue';

const count = ref(0); // 创建响应式引用
console.log(count.value); // 读取值
count.value = 1; // 修改值

ref 的实现原理

Vue3 的 ref 本质上是对 reactive 的封装,将传入的值包装为一个带有 value 属性的对象,再通过 reactive 实现响应式。

  1. 包装对象
    ref 将原始值或对象转换为 { value: ... } 的形式,确保统一通过 .value 访问。

  2. 响应式处理
    内部调用 reactive 对包装后的对象进行响应式代理,依赖收集和触发更新通过 reactive 系统完成。

    vue3 ref实现

简化版实现逻辑:

function ref(value) {
  return reactive({ value });
}

ref 与 reactive 的区别

  • 适用类型
    ref 适用于基本类型(如 numberstring)和对象,而 reactive 仅适用于对象。

  • 访问方式
    ref 需要通过 .value 访问,reactive 直接访问属性。

    vue3 ref实现

  • 自动解包
    在模板中使用时,ref 会自动解包(无需 .value),但在 JavaScript 中仍需显式使用。

源码中的优化

实际 Vue3 源码中,ref 并非直接调用 reactive,而是通过 RefImpl 类实现,包含额外的性能优化和类型标记:

class RefImpl {
  constructor(value) {
    this._value = value;
    this.dep = new Set(); // 依赖收集
  }
  get value() {
    trackRef(this); // 依赖追踪
    return this._value;
  }
  set value(newVal) {
    this._value = newVal;
    triggerRef(this); // 触发更新
  }
}

使用场景建议

  • 基本类型:优先使用 ref,因为 reactive 无法直接代理基本类型。
  • 模板引用:通过 ref 获取 DOM 元素。
  • 逻辑复用:在组合式函数中返回 ref 便于外部解构使用。
// 获取 DOM 元素
const inputRef = ref(null);
onMounted(() => {
  inputRef.value.focus();
});

类型标注(TypeScript)

通过泛型指定 ref 的类型:

const count = ref<number>(0); // 明确类型为 number

标签: ref
分享给朋友:

相关文章

ref实现原理vue

ref实现原理vue

ref 的实现原理(Vue 3) 在 Vue 3 中,ref 是响应式系统的核心 API 之一,用于将基本类型或对象转换为响应式引用。其实现依赖于 ES6 的 Proxy 和 getter/sette…

vue3 ref实现

vue3 ref实现

Vue3 中 ref 的实现原理 在 Vue3 中,ref 是一个核心的响应式 API,用于将一个基本类型或对象转换为响应式数据。以下是 ref 的实现原理和关键机制: 响应式包装 ref 通过 R…

react中ref如何

react中ref如何

使用 useRef Hook 创建 ref 在函数组件中,可以通过 useRef Hook 创建一个 ref 对象。useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传入…

react中ref如何

react中ref如何

React 中 ref 的使用方法 在 React 中,ref 用于直接访问 DOM 元素或 React 组件实例。以下是几种常见的 ref 使用方法: 使用 createRef(React 16.…

ref实现原理vue

ref实现原理vue

ref 的实现原理(Vue 3) Vue 3 中的 ref 是一个响应式 API,用于将一个基本类型或对象转换为响应式引用。其核心原理基于 JavaScript 的 Proxy 和 getter/se…