Vue3 响应式系统详解:ref 和 reactive 应该怎么选?

Vue3 引入了 Composition API,核心之一就是响应式系统。

其中两个最常用的响应式工具是:

- `ref()`:包装**基本类型**或简单值
- `reactive()`:包装**对象或数组**

一、ref 是什么?

`ref()` 用于创建一个响应式变量,哪怕是数字、字符串也可以。

import { ref } from 'vue'

const count = ref(0)
console.log(count.value) // 访问时需 .value

在模板中,可以直接用 {{ count }},Vue 会自动帮你 .value

<template>
  <button @click="count++">点击了 {{ count }} 次</button>
</template>

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

二、reactive 是什么?

用于创建响应式对象(引用类型),推荐用在包含多个字段的结构上。

import { reactive } from 'vue'

const user = reactive({
  name: '小明',
  age: 25
})

模板中也能直接访问字段:

<template>
  <p>姓名:{{ user.name }}</p>
  <p>年龄:{{ user.age }}</p>
</template>

三、ref 与 reactive 的对比

项目refreactive
适用类型基本类型 / 任意对象 / 数组 / 嵌套结构
取值方式.value直接访问属性
支持嵌套不推荐(嵌套对象不是响应式)
模板中可省略 .value直接访问
用于表单绑定v-model="xxx"v-model="user.name"

四、常见误区和补充

1. reactive 的嵌套仍然是响应式的?

是的!

const state = reactive({
  user: {
    name: 'Jack',
    email: 'a@b.com'
  }
})

state.user.name 的修改是响应式的。

2. ref 包裹对象,如何访问?
const obj = ref({ a: 1 })
console.log(obj.value.a) // 注意 .value

如果你需要像 obj.a 那样使用,请用 reactive

五、实战对比 Demo

<template>
  <h2>ref 示例</h2>
  <p>{{ count }}</p>
  <button @click="count++">+1</button>

  <h2>reactive 示例</h2>
  <p>姓名:{{ user.name }}</p>
  <input v-model="user.name" />
</template>

<script setup>
import { ref, reactive } from 'vue'

const count = ref(0)
const user = reactive({
  name: 'Alice'
})
</script>

小结

  • 基本类型 → 用 ref

  • 对象/数组 → 用 reactive

  • 模板中可以省略 .value

  • 组合使用:reactive + ref 搭配是常态(如状态 + 标志位)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值