当前位置:首页 > VUE

ref实现原理vue

2026-01-18 09:54:50VUE

ref 的实现原理(Vue 3)

在 Vue 3 中,ref 是响应式系统的核心 API 之一,用于将基本类型或对象转换为响应式引用。其实现依赖于 ES6 的 Proxygetter/setter 机制。

基本类型处理
对于基本类型(如 numberstring),ref 会通过一个包装对象实现响应式。内部通过 value 属性访问实际值,触发依赖收集和更新通知:

function ref(value) {
  return createRef(value, false);
}

function createRef(rawValue, shallow) {
  // 已经是 ref 则直接返回
  if (isRef(rawValue)) return rawValue;
  return new RefImpl(rawValue, shallow);
}

class RefImpl {
  constructor(value, __v_isShallow) {
    this.__v_isShallow = __v_isShallow;
    this._rawValue = value;
    this._value = __v_isShallow ? value : toReactive(value);
    this.dep = undefined;
  }

  get value() {
    trackRefValue(this); // 依赖收集
    return this._value;
  }

  set value(newVal) {
    if (hasChanged(newVal, this._rawValue)) {
      this._rawValue = newVal;
      this._value = toReactive(newVal);
      triggerRefValue(this); // 触发更新
    }
  }
}

对象类型处理
当传入对象时,ref 会调用 reactive 进行深层响应式转换。通过 toReactive 函数自动处理:

const toReactive = (value) => 
  isObject(value) ? reactive(value) : value;

reactive 的区别

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

    const count = ref(0);
    count.value++; // 需要 .value
    
    const state = reactive({ count: 0 });
    state.count++; // 直接访问
  • 适用场景
    ref 适用于基本类型或需要替换整个对象的场景,reactive 适用于对象/数组的深层响应式。

    ref实现原理vue

模板中的自动解包

在模板中使用 ref 时,Vue 会自动解包,无需手动写 .value

<template>
  <div>{{ count }}</div> <!-- 自动解包 -->
</template>
<script setup>
  const count = ref(0);
</script>

依赖收集与触发

  • 依赖收集
    通过 trackRefValueget value() 时记录当前活跃的 effect(如组件的渲染函数)。

  • 触发更新
    通过 triggerRefValueset value() 时通知所有依赖的 effect 重新执行。

    ref实现原理vue

源码关键点

  1. 响应式标记
    ref 对象通过 __v_isRef 标记,便于 isRef 检查。

  2. 性能优化
    多次设置相同值时会通过 hasChanged 比较,避免不必要的更新触发。

  3. 浅层 ref
    通过 shallowRef 可创建仅对 .value 敏感的浅层响应式引用。

标签: 原理ref
分享给朋友:

相关文章

vue如何实现原理

vue如何实现原理

Vue 的核心实现原理 Vue 的核心原理主要包括响应式系统、虚拟 DOM、模板编译和组件化。以下分模块详细说明其实现机制。 响应式系统 Vue 2.x 使用 Object.defineProper…

vue核心实现原理详解

vue核心实现原理详解

Vue 核心实现原理 Vue.js 的核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键部分的详细解析: 响应式系统 Vue 2.x 使用 Object.definePr…

vue 实现原理

vue 实现原理

Vue 实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。 响应式系统 Vue 使用 Object.define…

vue原理与实现

vue原理与实现

Vue 的核心原理 Vue 是一个渐进式 JavaScript 框架,其核心原理包括响应式系统、虚拟 DOM、模板编译和组件化设计。这些机制共同构成了 Vue 的高效开发模式。 响应式系统通过 Ob…

vue实现原理书籍

vue实现原理书籍

以下是关于Vue实现原理的推荐书籍和学习资源,涵盖核心机制、源码解析及实践应用: 深入理解Vue核心机制 《Vue.js设计与实现》 作者霍春阳,系统剖析Vue 3的响应式系统、虚拟DOM、编译器等…

vue vif实现原理

vue vif实现原理

Vue v-if 实现原理 Vue 的 v-if 指令通过条件渲染控制 DOM 元素的显示与隐藏。其实现原理基于虚拟 DOM 和编译阶段的代码生成。 编译阶段 模板中的 v-if 会被编译为渲染函数…