当前位置:首页 > VUE

vue ref实现

2026-01-07 23:14:49VUE

Vue 中 ref 的实现

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

基本实现原理

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

vue ref实现

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 访问或修改值。

vue ref实现

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

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

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

标签: vueref
分享给朋友:

相关文章

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…

vue 实现遮罩

vue 实现遮罩

Vue 实现遮罩层的方法 使用固定定位和透明背景 在Vue中实现遮罩层可以通过CSS固定定位结合透明背景色完成。创建一个全屏遮罩组件,利用position: fixed覆盖整个视窗。 <tem…

vue实现画廊

vue实现画廊

Vue实现画廊的基本方法 使用Vue.js实现画廊功能可以通过多种方式完成,以下是一种常见的实现方案: 安装必要依赖 npm install vue-gallery --save 引入组件并注册…

vue实现表单

vue实现表单

Vue 表单实现方法 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定。适用于 input、textarea、select 等元素。 <template> <…

vue遮罩实现

vue遮罩实现

实现 Vue 遮罩的常见方法 使用 CSS 定位和透明度 创建一个全屏遮罩层,通过 CSS 固定定位覆盖整个视口,并设置半透明背景色。 <template> <div cl…