当前位置:首页 > 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实现公告

vue实现公告

Vue 实现公告功能的方法 公告功能通常需要实现滚动展示、自动切换或固定显示的效果。以下是几种常见的实现方式: 使用 marquee 标签实现滚动公告 <template> <…

vue滚动实现

vue滚动实现

Vue 滚动实现方法 使用原生滚动 在 Vue 中可以通过 ref 获取 DOM 元素,调用原生滚动方法实现滚动效果。适用于简单场景。 <template> <div ref=…

vue实现拖动

vue实现拖动

Vue实现拖动的常用方法 在Vue中实现拖动功能通常需要结合HTML5的拖放API或第三方库。以下是几种常见实现方式: 使用HTML5原生拖放API HTML5提供了原生拖放API,可以通过drag…

vue实现监听

vue实现监听

监听数据变化 在Vue中,可以通过watch选项或$watch方法监听数据的变化。watch适用于组件选项内声明式监听,$watch适用于动态监听。 // 选项式API export default…

vue 实现滑动

vue 实现滑动

Vue 实现滑动效果的方法 在Vue中实现滑动效果可以通过多种方式,以下是几种常见的方法: 使用CSS过渡和动画 通过Vue的<transition>组件结合CSS过渡或动画实现滑动效果…

vue实现影院

vue实现影院

Vue实现影院功能的基本思路 使用Vue框架开发影院功能需要结合前端组件化开发、状态管理以及后端API交互。以下是关键实现步骤: 影院页面布局设计 影院页面通常分为顶部导航栏、影院列表区域和底部导航…