当前位置:首页 > VUE

vue ref实现

2026-01-07 23:14:49VUE

Vue 中 ref 的实现

在 Vue 中,ref 是一个用于创建响应式引用的 API,适用于基本类型和对象。以下是 ref 的核心实现原理和使用方法。

基本实现原理

ref 通过 Reactive 系统将一个值包装为响应式对象。内部使用 value 属性存储实际值,并通过 gettersetter 实现依赖收集和触发更新。

function ref(value) {
  return {
    get value() {
      track(this, 'value'); // 依赖收集
      return value;
    },
    set value(newValue) {
      value = newValue;
      trigger(this, 'value'); // 触发更新
    }
  };
}

在模板中的使用

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

<template>
  <div>{{ count }}</div>
</template>

<script setup>
import { ref } from 'vue';
const count = ref(0);
</script>

在组合式 API 中的使用

在 JavaScript 中操作 ref 时,需要通过 .value 访问或修改值。

import { ref } from 'vue';
const count = ref(0);

function increment() {
  count.value++; // 修改值
}

refreactive 的区别

  • ref 适用于基本类型(如 numberstring)或对象引用,通过 .value 访问。
  • reactive 仅适用于对象,直接访问属性,无需 .value
const objRef = ref({ foo: 1 });
objRef.value.foo = 2; // 需要 .value

const objReactive = reactive({ foo: 1 });
objReactive.foo = 2; // 直接修改

ref 的进阶用法

通过 unref 可以简化逻辑,避免重复判断 .value

import { ref, unref } from 'vue';
const maybeRef = ref(0);
const value = unref(maybeRef); // 自动解包

在响应式对象中使用 ref

ref 被嵌套在 reactive 对象中时,会自动解包 .value

vue ref实现

const count = ref(0);
const state = reactive({ count });

console.log(state.count); // 直接访问,无需 .value

标签: vueref
分享给朋友:

相关文章

vue 实现滚动

vue 实现滚动

实现滚动的基本方法 在Vue中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以通…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue实现网站

vue实现网站

Vue 实现网站的基本步骤 Vue.js 是一个渐进式 JavaScript 框架,适合构建现代化的单页应用(SPA)或动态网站。以下是使用 Vue 实现网站的基本方法。 初始化 Vue 项目 使用…

vue实现ide

vue实现ide

Vue 实现 IDE 的基本思路 使用 Vue 构建一个简易的集成开发环境(IDE)需要整合代码编辑器、文件管理、终端模拟等功能。以下是关键实现步骤和推荐工具。 核心功能模块 代码编辑器 使用…

vue实现 treegrid

vue实现 treegrid

Vue 实现 TreeGrid 的方法 使用现成组件库 Element UI、Ant Design Vue 等流行组件库提供了现成的 TreeTable/TreeGrid 组件,可直接使用。 Ele…

proxy实现vue

proxy实现vue

使用 Proxy 实现 Vue 响应式系统 Vue 3 的响应式系统基于 JavaScript 的 Proxy API,通过代理对象实现对属性的拦截和依赖追踪。以下是实现的核心逻辑: 创建响应式对象…