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

Vue3 中 ref 与 reactive 使用场景总结(含对比与示例)

🌟 Vue3 中 refreactive 使用场景总结(含对比与示例)

📌 本文将帮你彻底理解:
什么时候使用 ref?什么时候使用 reactive?两者到底有什么区别?如何结合使用?看完这一篇就够了!


✳️ 一、基本定义

特性ref()reactive()
作用包装基本类型对象为响应式包装对象/数组为响应式
返回值包装后的对象为 { value: 原始值 }返回的是原始对象的 Proxy
解构使用需要 .value 访问可直接访问属性(但解构会失去响应式)
使用频率中高

🧠 二、选择依据与使用场景

✅ 使用 ref() 的场景:

场景示例
1. 管理基本类型数据const count = ref(0)
2. 想响应式访问 DOM 或组件实例const inputRef = ref(null)
3. 异步加载中状态、定时器等const loading = ref(false)
4. 单个对象响应式,且需保持 .value 明确性const user = ref({ name: 'Jin' })
5. 组合式函数中需要透明封装响应式值return { state: ref(...) }

✅ 使用 reactive() 的场景:

场景示例
1. 响应式对象或数组const user = reactive({ name: '张三', age: 18 })
2. 多层嵌套的对象const form = reactive({ user: { name: '' }, tags: [] })
3. 表单、配置项、复杂数据结构const config = reactive({ theme: 'dark', size: 'small' })
4. 频繁修改属性值,不需要解构使用user.age++

🧪 三、常见问题与最佳实践

❓ Q1:为什么不能对 reactive 对象解构?

const state = reactive({ count: 0 });
const { count } = state; // ❌ 失去响应式

✅ 正确方式:

watch(() => state.count, (val) => { ... });

❓ Q2:refreactive 能混用吗?

可以,组合使用是常见实践:

const form = reactive({ name: '', age: 0 });
const loading = ref(false);

❓ Q3:如何在模板中使用 ref

无需加 .value,模板中会自动解包:

<template><div>{{ count }}</div>
</template><script setup>
const count = ref(0)
</script>

📘 四、实用示例对比

示例 1:基本类型计数器(推荐 ref

const count = ref(0);
const increment = () => count.value++;

示例 2:表单响应式数据(推荐 reactive

const form = reactive({username: '',password: '',
});

示例 3:ref + 对象(组合式封装)

const user = ref({ name: 'Jin', age: 20 });
// user.value.name = '李四';

✅ 总结对比表

使用目的推荐方式理由
基本类型ref简洁清晰
引用类型(对象/数组)reactive自动展开,无需 .value
DOM/组件实例引用ref用于 ref="xxx"
嵌套对象响应式reactive多层属性修改方便
与组件交互、组合式封装ref更好控制数据流

📌 建议记忆口诀

  • 基本类型用 ref,对象数组选 reactive
  • 模板中免 .value,脚本中别忘 .value
  • 组合 API 常搭配使用,按需选型最灵活

相关文章:

  • 小程序 顶部栏标题栏 下拉滚动 渐显白色背景
  • 7.4.2B+树
  • 制造业B端页面个性化设计案例:生产流程监控的专属布局打造
  • 【数据结构】_二叉树基础OJ
  • 数字孪生:为UI前端设计带来沉浸式交互新体验
  • 逆变器工作原理
  • 文章以及好用网站分享
  • Elasticsearch 索引文档的流程
  • WebSocket长连接在小程序中的实践:消息推送与断线重连机制设计
  • 移远 SC200L 与 贴片 SD 卡 MKDN064GIL-ZA:开启 T-BOX 智能网联新时代
  • spring-core 资源管理- Resource 接口讲解
  • 历史项目依赖库Bugfix技巧-类覆盖
  • 正则表达式详解:从基础到高级应用的全面指南
  • 【文件】Linux 内核优化实战 - fs.inotify.max_user_watches
  • 基本进程调度算法
  • 马斯克YC技术核弹全拆解:Neuralink信号编译器架构·星舰着陆AI代码·AGI防御协议(附可复现算法核心/开源替代方案/中国技术对标路径)
  • anchor 智能合约 IDL 调用
  • 【信创-k8s】银河麒麟V10国防版+鲲鹏/飞腾(arm64架构)在线/离线部署k8s1.30+kubesphere
  • 《汇编语言:基于X86处理器》第4章 数据传送、寻址和算术运算(1)
  • Python----OpenCV(图像増强——图像平滑、均值滤波、高斯滤波、中值滤波、双边滤波)
  • 推广网站可以做跳转吗/保定百度推广优化排名
  • 政府网站建设立规矩/网店运营策划方案
  • 网站ip访问做图表/培训机构网站制作
  • 网上商店的业务流程/优化设计高中
  • wap网址是什么意思/上海seo优化公司 kinglink
  • 成人用品网站优化方法/谈谈对seo的理解