当前位置:首页 > 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 会自动解包,无需手动写 .value

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

依赖收集与触发

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

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

源码关键点

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

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

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

    ref实现原理vue

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

相关文章

简述vue实现原理

简述vue实现原理

Vue 实现原理概述 Vue 的核心实现原理基于数据劫持、虚拟 DOM 和模板编译等技术,通过响应式系统实现数据和视图的自动同步。 响应式系统 Vue 使用 Object.definePropert…

vue set实现原理

vue set实现原理

Vue.set 的实现原理 Vue.set 是 Vue.js 提供的一个全局 API,用于向响应式对象添加新属性并确保其也是响应式的。其核心原理基于 Vue 的响应式系统实现。 响应式系统基础 Vu…

php购物车的实现原理

php购物车的实现原理

购物车基本概念 购物车是电子商务网站的核心功能之一,允许用户临时存储选中的商品,支持增删改查操作,最终生成订单。PHP实现通常结合Session或数据库存储数据。 Session存储实现 使用PHP…

vue keepalive 实现原理

vue keepalive 实现原理

Vue KeepAlive 实现原理 Vue 的 KeepAlive 是一个内置组件,用于缓存不活动的组件实例,避免重复渲染,提升性能。以下是其核心实现原理: 缓存机制 KeepAlive 通过维护…

vue实现原理书籍

vue实现原理书籍

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

vue 监听实现原理

vue 监听实现原理

Vue 监听实现原理 Vue 的监听机制主要通过 Object.defineProperty 或 Proxy 实现数据劫持,结合观察者模式(Observer-Watcher-Dep)完成依赖收集和派发…