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

Vue 3 中 ref 和 reactive 的区别与使用场景

Vue 3 中 ref 和 reactive 的区别与使用场景

  • Vue 3 中 ref 和 reactive 的区别与使用场景
    • 核心区别
    • 详细解释
      • 1. ref - 引用响应式变量
      • 2. reactive - 响应式对象
    • 实际代码对比
      • ref 示例
      • reactive 示例
    • 什么时候该用哪个?
      • 使用 ref 的情况:
      • 使用 reactive 的情况:
    • 特殊情况处理
      • 解构 reactive 对象
      • ref 解包
    • 总结

Vue 3 中 ref 和 reactive 的区别与使用场景

refreactive 是 Vue 3 组合式 API 中两个核心的响应式函数,它们有不同的使用场景。

核心区别

特性refreactive
数据类型任何类型(基本类型、对象、数组)仅对象类型(Object、Array、Map、Set)
访问方式需要 .value直接访问属性
重新赋值支持(保持响应式)不支持(会失去响应式)
模板使用自动解包(不需要 .value直接使用
解构需要 toRefs 保持响应式需要 toRefs 保持响应式

详细解释

1. ref - 引用响应式变量

const articles = ref([])

为什么在这里使用 ref?

// 这些操作都需要重新赋值,ref 能保持响应式
articles.value = []                    // 清空数组
articles.value = newArticles           // 替换整个数组
articles.value = [...articles.value, newArticle] // 创建新数组// 在模板中自动解包,不需要 .value
// <div v-for="article in articles">

ref 的典型使用场景:

  • 需要重新赋值的数组
  • 基本类型数据(string、number、boolean)
  • 可能被完全替换的对象
  • 需要响应式包装的任何值

2. reactive - 响应式对象

const newArticle = reactive({title: '',excerpt: '',content: ''
})

为什么在这里使用 reactive?

// 直接修改属性,不需要 .value
newArticle.title = '新标题'
newArticle.excerpt = '新摘要'
newArticle.content = '新内容'// 整个表单对象作为一个整体,属性之间有关联
// 不需要重新赋值整个对象

reactive 的典型使用场景:

  • 表单对象
  • 配置对象
  • 相关联的一组数据
  • 不需要重新赋值的复杂对象

实际代码对比

ref 示例

// 基本类型
const count = ref(0)
count.value++  // 需要 .value// 数组
const list = ref([])
list.value.push('item')  // 需要 .value
list.value = []          // 可以重新赋值// 在模板中:自动解包
// <div>{{ count }}</div>
// <div v-for="item in list">

reactive 示例

// 对象
const user = reactive({name: 'John',age: 25
})
user.name = 'Jane'  // 直接访问,不需要 .value// 不能重新赋值
// user = { name: 'Bob' }  // 这会失去响应式(错误)// 在模板中:直接使用属性
// <div>{{ user.name }}</div>

什么时候该用哪个?

使用 ref 的情况:

// 1. 基本类型
const isLoading = ref(false)
const page = ref(1)
const searchQuery = ref('')// 2. 需要重新赋值的数组
const items = ref([])
const selectedItems = ref([])// 3. 可能被替换的对象
const config = ref({ theme: 'light' })
config.value = { theme: 'dark' }  // 可以替换

使用 reactive 的情况:

// 1. 表单对象
const form = reactive({username: '',password: '',remember: false
})// 2. 相关联的配置
const settings = reactive({theme: 'dark',language: 'zh-CN',notifications: true
})// 3. 复杂的状态对象
const state = reactive({user: null,permissions: [],preferences: {}
})

特殊情况处理

解构 reactive 对象

const state = reactive({count: 0,name: 'Vue'
})// 解构会失去响应式(错误)
const { count, name } = state// 使用 toRefs 保持响应式(正确)
const { count, name } = toRefs(state)
count.value++  // 现在需要 .value

ref 解包

const objectRef = ref({ count: 0 })// 在模板中自动解包
// <div>{{ objectRef.count }}</div>// 在 JavaScript 中需要 .value
objectRef.value.count++

总结

  • 用 ref:基本类型、需要重新赋值的值
  • 用 reactive:不需要重新赋值的对象、表单数据

愿你我都能在各自的领域里不断成长,勇敢追求梦想,同时也保持对世界的好奇与善意!

http://www.dtcms.com/a/577261.html

相关文章:

  • 和规划网站如何产品推广会议流程
  • LVS/IPVS与Keepalived在云原生环境中的深度学习与实践(一)
  • 汽车信息安全--关于安全强度的误区
  • .NET Framework 4.8 + Microsoft.Data.Sqlite 报 Library e_sqlite3 not found
  • 力扣1539. 第 k 个缺失的正整数
  • 珠海移动网站建设公司洛阳网站备案
  • 建站公司最新排名收费做网站
  • MATLAB实现的金字塔光流算法
  • 喜报 | 金口良策荣膺2025金熊猫全球创新创业大赛初创组优秀奖
  • 段描述符(Segment Descriptor)
  • 广西北海网站建设淘宝seo是指
  • MATLAB 使用经验帖
  • 资金盘网站开发多少钱一般纳税人企业所得税怎么征收
  • 先进核技术:未来能源革命的核心驱动力
  • 基于MATLAB的飞机姿态数据分析与轮胎轴承横向位移关键特征识别
  • 网站dns查询超大尺寸哔哩哔哩网站
  • 视频流画线 视频流画多边形
  • TinyTroupe:微软开源的轻量级多智能体“人格”模拟库(一)
  • 【计算机组成原理】计算机系统概述:从发展历程到工作原理
  • DOM Text
  • ARM《10》_01_字符设备驱动基础、学习开发字符驱动内核程序、总结规律和模板
  • 从灵光到落地:用 ModelEngine 可视化编排「会议纪要智能体」——全程 0 代码,2 小时上线!
  • FastAPI 基础入门-章节五(Pydantic的使用)
  • C/C++图形库_EasyX 环境配置(VSCode+MinGW )
  • 优化网站关键词优化page wordpress
  • 简单并完全免费的方法-让夸克网盘不限速下载
  • Vue 指令系统深度解析:条件渲染的艺术(v-if/v-else-if/v-else 与 v-show 的实战指南)
  • 【Linux】Reactor反应堆模式
  • iOS 上架费用全解析 开发者账号、App 审核、工具使用与开心上架(Appuploader)免 Mac 成本优化指南
  • SCADA升级详解5 | SCADA业务报表,优化资源与决策支持