当前位置: 首页 > news >正文

vue中reactive()和ref()的用法

在 Vue 3 的 Composition API 里,reactive()ref() 都是用来把「普通数据」变成「响应式数据」的函数。
一句话区别:

  • reactive() 只能包裹对象/数组
  • ref() 可以包裹任何类型,但在 模板 里读取时,不需要 .value

下面按「概念 → API → 使用 → 常见注意点」展开。


1. 为什么需要它们

Vue 2 里只有 data() { return {...} } 这一种声明响应式数据的方式。
Vue 3 的 Composition API 把「声明响应式」拆成了两个底层函数:

函数适合场景返回值
reactive()对象、数组Proxy
ref()基本类型、对象、数组RefImpl 对象

2. reactive() 用法

import { reactive } from 'vue'const state = reactive({count: 0,list: [1, 2, 3]
})// 使用
state.count++         // ✅ 触发视图更新
state.list.push(4)    // ✅ 触发视图更新
  • 模板里直接写:
<template><p>{{ state.count }}</p><button @click="state.count++">+</button>
</template>

⚠️ 注意

  • 不能对 state 重新赋值(会失去响应式)
state = { count: 10 } // ❌ 错误
  • 解构会丢失响应式
const { count } = state // ❌ count 不是响应式
// 正确:用 toRefs(state) 解构

3. ref() 用法

import { ref } from 'vue'const count = ref(0)
const name  = ref('Vue')
const obj   = ref({ a: 1 }) // 也可以包对象
  • 脚本里取值 / 赋值 必须加 .value
count.value++            // ✅
obj.value.a = 2          // ✅
  • 模板里会自动解包,不写 .value
<template><p>{{ count }}</p>   <!-- 模板里直接写 count --><button @click="count++">+</button>
</template>

⚠️ 注意

  • 重新赋值不会破坏响应式
count.value = 100   // ✅ 仍是响应式
  • 对对象/数组用 ref() 时,深层属性依旧是响应式,因为内部会递归 reactive()

4. 什么时候用哪个?

场景推荐
需要一组关联属性(表单、状态对象)reactive()
只有一个基本类型(数字、布尔、字符串)ref()
需要解构重新赋值(替换整个对象)ref()
需要深层响应式结构固定reactive()

5. 组合使用示例

<script setup>
import { reactive, ref } from 'vue'// 一整个对象
const user = reactive({name: 'Tom',age: 18
})// 单个值
const loading = ref(false)// 方法
function addAge() {user.age++loading.value = true
}
</script><template><div v-if="!loading">{{ user.name }} - {{ user.age }}<button @click="addAge">长大一岁</button></div><p v-else>加载中...</p>
</template>

6. 速记口诀

  • 对象用 reactive,基本类型用 ref
  • 模板里 ref.value,脚本里千万别省。
  • 解构对象用 toRefs(),重新赋值用 ref()
http://www.dtcms.com/a/317320.html

相关文章:

  • FluentUI的介绍与使用案列
  • 组合期权:股票担保策略
  • Suno API V5模型 python源码 —— 使用灵感模式进行出创作
  • 从原理图到PCB的布局
  • 优选算法1
  • 学习资料推荐
  • 商用音乐素材获取:素材平台、AI制作与版权考量
  • 如何将照片从POCO手机传输到Mac电脑
  • OpenAI GPT-OSS:首个可在笔记本上运行的推理模型
  • 科技云报到:Agent应用爆发,谁成为向上托举的力量?
  • 微算法科技(NASDAQ:MLGO)利用鸽群分散算法,提高区块链交易匹配算法效能
  • 【博客系统UI自动化测试报告】
  • 【递归完全搜索】USACO Bronze 2019 December - 奶牛排列Livestock Lineup
  • 每日算法刷题Day57:8.6:leetcode 单调栈6道题,用时2h
  • 【前端开发】五. ES5和ES6对比
  • Android 之 Kotlin中的符号
  • OpenObserve非sql模式 query editor 中 xx like ‘|’报错如何处理
  • RNN梯度爆炸/消失的杀手锏——LSTM与GRU
  • Disruptor 的原理、应用场景
  • jspdf或react-to-pdf等pdf报错解决办法
  • iOS混淆工具有哪些?在集成第三方 SDK 时的混淆策略与工具建议
  • Java Socket -- UDP通信
  • CSS 回流(Reflow)和重绘(Repaint)
  • C语言基础_排序算法和二分法查找
  • TDengine IDMP 背后的技术三问:目录、标准与情景
  • 自学嵌入式 day43 中断系统
  • 1-知识图谱—知识图谱表示与建模:给知识 “搭框架”,让每句话都有条理
  • Java学习第一百一十一部分——Jenkins(二)
  • 开源流媒体服务器ZLMediaKit 的Java Api实现的Java版ZLMediaKit流媒体服务器-二开视频对话
  • 周鸿祎:AI 时代安全智能体,能否重塑数字安全格局?