当前位置:首页 > VUE

vue ref实现

2026-02-10 09:52:13VUE

Vue 中 ref 的实现

在 Vue 中,ref 是一个用于创建响应式引用的 API。它可以用于基本类型、对象或组件实例,并确保其值是响应式的。

基本用法

import { ref } from 'vue'

const count = ref(0)
console.log(count.value) // 0

count.value++
console.log(count.value) // 1

实现原理

ref 的核心是通过一个对象包装原始值,利用 Vue 的响应式系统跟踪变化。当访问或修改 .value 时,会触发依赖收集和更新。

vue ref实现

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

在模板中使用

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

<template>
  <div>{{ count }}</div>
  <button @click="count++">Increment</button>
</template>

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

与 reactive 的区别

ref 适用于基本类型或需要直接替换整个对象的情况,而 reactive 适用于对象或数组。ref 通过 .value 访问,reactive 直接访问属性。

vue ref实现

const objRef = ref({ foo: 1 })
const objReactive = reactive({ foo: 1 })

objRef.value.foo = 2
objReactive.foo = 2

在组件上使用

ref 可以用于获取组件实例:

<template>
  <ChildComponent ref="child" />
</template>

<script setup>
import { ref } from 'vue'
const child = ref(null)

onMounted(() => {
  console.log(child.value) // 组件实例
})
</script>

类型定义 (TypeScript)

在 TypeScript 中,ref 可以明确指定类型:

const count = ref<number>(0)
const user = ref<{ name: string }>({ name: 'Alice' })

注意事项

  • 在组合式 API 中始终通过 .value 访问 ref 的值
  • 在模板中会自动解包,无需 .value
  • 避免在 reactive 对象中直接替换整个 ref,应替换 .value

标签: vueref
分享给朋友:

相关文章

vue实现ai

vue实现ai

Vue 实现 AI 功能 Vue.js 可以通过集成第三方 AI 服务或本地 AI 模型来实现 AI 功能。以下是几种常见的方法: 集成第三方 AI API 使用 Vue 调用如 OpenAI、Go…

实现vue模版

实现vue模版

Vue 模板的基本结构 Vue 模板基于 HTML 语法,通过 Vue 的指令和插值实现动态渲染。以下是一个基础模板示例: <template> <div id="…

vue 动画 实现

vue 动画 实现

vue 动画实现方法 Vue 提供了多种方式实现动画效果,主要包括过渡动画和动态动画两类。 使用 <transition> 组件实现基础过渡 通过 Vue 内置的 <transi…

vue实现删除

vue实现删除

Vue 实现删除功能的方法 在 Vue 中实现删除功能通常涉及以下几个步骤: 数据绑定与列表渲染 使用 v-for 指令渲染列表数据,并为每个项绑定唯一标识符(如 id)。例如: <ul…

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。…

vue实现上传

vue实现上传

Vue 文件上传实现方法 使用 Vue 实现文件上传可以通过原生 HTML5 的 <input type="file"> 元素结合 Vue 的事件处理和数据绑定来实现。 基础实现步骤…