当前位置:首页 > VUE

vue ref实现原理

2026-01-17 08:30:11VUE

Vue 3 中 ref 的实现原理

ref 是 Vue 3 响应式系统的核心 API 之一,用于将基本类型或对象转换为响应式引用。以下是其实现原理的关键点:

核心机制

  • ref 通过创建一个包装对象(RefImpl 实例)实现响应式。该对象包含一个 value 属性,访问或修改时会触发依赖收集和更新。
  • 对于基本类型(如 numberstring),ref 直接包装其值;对于对象类型,内部会调用 reactive 进行深层响应式处理。

源码简化逻辑

class RefImpl {
  constructor(value) {
    this._value = isObject(value) ? reactive(value) : value;
    this.dep = new Set(); // 存储依赖的 effect
  }

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

  set value(newVal) {
    if (hasChanged(this._value, newVal)) {
      this._value = isObject(newVal) ? reactive(newVal) : newVal;
      triggerRefValue(this); // 触发更新
    }
  }
}

function ref(value) {
  return new RefImpl(value);
}

reactive 的区别

  • ref 通过 .value 访问数据,适合包装基本类型或需要直接替换整个对象的情况。
  • reactive 直接返回代理对象,适用于复杂对象的深层响应式转换,但无法处理基本类型。

性能优化

  • ref 对基本类型的处理比 reactive 更轻量,避免不必要的代理开销。
  • 通过 hasChanged 检查值是否变化,避免重复触发更新。

模板中的自动解包

在模板中使用 ref 时,Vue 会自动解包 .value,无需显式调用:

<script setup>
const count = ref(0);
</script>

<template>
  <button @click="count++">{{ count }}</button> <!-- 自动解包 -->
</template>

关键设计思想

ref 的设计解决了 JavaScript 中基本类型无法通过 Proxy 实现响应式的问题,通过包装对象的方式统一了响应式数据的访问接口,同时保持与 reactive 的协同工作能力。

vue ref实现原理

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

相关文章

vue实现选区创建

vue实现选区创建

Vue 实现选区创建的方法 在 Vue 中实现选区创建通常涉及 DOM 操作和事件处理。以下是几种常见的方法: 使用原生 DOM API 通过 window.getSelection() 和 Ra…

vue实现路由导航

vue实现路由导航

路由导航的实现方式 在Vue中,路由导航主要通过Vue Router实现。Vue Router是Vue.js官方的路由管理器,用于构建单页面应用(SPA)。 基本路由配置 安装Vue Router后…

拖拽式编程vue实现

拖拽式编程vue实现

拖拽式编程在 Vue 中的实现方法 使用 HTML5 原生拖放 API Vue 可以结合 HTML5 的拖放 API 实现基础拖拽功能。通过 draggable 属性标记可拖拽元素,监听 dragst…

vue实现签约合作弹窗

vue实现签约合作弹窗

实现签约合作弹窗的步骤 使用Vue实现签约合作弹窗可以通过组件化方式完成,结合模态框和表单交互逻辑。以下是具体实现方法: 1. 创建弹窗组件 新建一个Vue组件文件(如SignContractDia…

vue实现字母添加排序

vue实现字母添加排序

实现字母添加排序的方法 在Vue中实现字母添加排序功能,可以通过以下步骤完成: 创建Vue实例并定义数据 new Vue({ el: '#app', data: { lette…

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name…