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

reactive 核心要点

reactive 核心要点

1. 基本概念

reactive 是 Vue 3 中创建对象类型响应式数据的 API,专门用于包装对象和数组。

2. 基本用法

import { reactive } from 'vue'// 对象类型
const car = reactive({ brand: '奔驰', price: 100 })// 数组类型  
const games = reactive([{ id: '01', name: '王者荣耀' },{ id: '02', name: '原神' }
])// 嵌套对象
const obj = reactive({a: { b: { c: 666 } }
})

3. 关键特点

✅ 直接访问和修改

// 读取 - 无需 .value
console.log(car.price)  // 100// 修改 - 无需 .value,直接修改
car.price += 10
games[0].name = '流星蝴蝶剑'
obj.a.b.c = 999

✅ 深度响应式

  • 对象的所有层级都是响应式的
  • 修改任意嵌套属性都会触发更新

✅ 模板中直接使用

<template><p>{{ car.brand }} - {{ car.price }}万</p><p>{{ obj.a.b.c }}</p>
</template>

4. 与 ref 对比

| 特性 | ref | reactive |

|------|-----|----------|

| 适用类型 | 基本类型 + 对象 | 对象类型 |

| 访问方式 | .value | 直接访问 |

| 模板使用 | 自动解包 | 直接使用 |

| 推荐场景 | 基本类型 | 对象/数组 |

5. 实际应用场景

// ✅ 推荐用 reactive
const user = reactive({ name: '张三', age: 18 })
const list = reactive([1, 2, 3])// ❌ 不推荐用 reactive
const name = reactive('张三')  // 用 ref 更好
const count = reactive(100)    // 用 ref 更好

一句话总结:reactive 是对象类型的"响应式包装器",直接访问修改,深度响应,适合复杂数据结构。

为什么不推荐用 reactive 包装基本类型?

1. 设计初衷不同

// reactive 设计用于对象
const user = reactive({ name: '张三', age: 18 })// ref 设计用于基本类型
const name = ref('张三')
const age = ref(18)

2. 访问方式不一致

// reactive 包装基本类型 - 奇怪
const name = reactive('张三')
console.log(name)  // 返回 Proxy 对象,不是字符串// ref 包装基本类型 - 自然
const name = ref('张三')
console.log(name.value)  // 返回字符串

3. 模板使用问题

// reactive 包装基本类型 - 奇怪
const name = reactive('张三')
console.log(name)  // 返回 Proxy 对象,不是字符串// ref 包装基本类型 - 自然
const name = ref('张三')
console.log(name.value)  // 返回字符串

4. 性能考虑

// reactive 会创建复杂的 Proxy 对象
const name = reactive('张三')  // 过度设计// ref 只包装一层
const name = ref('张三')       // 简单高效

5. 实际对比

// ❌ 不推荐
const name = reactive('张三')
const age = reactive(18)
const isActive = reactive(true)// ✅ 推荐
const name = ref('张三')
const age = ref(18)
const isActive = ref(true)// ✅ 对象用 reactive
const user = reactive({ name: '张三', age: 18 })

总结:reactive 是为对象设计的,包装基本类型会导致访问复杂、性能浪费,所以推荐用 ref 处理基本类型。

http://www.xdnf.cn/news/18600.html

相关文章:

  • Unreal Engine UPrimitiveComponent
  • 数据分析编程第二步: 最简单的数据分析尝试
  • day58 拓扑排序 (kama117. 软件构建) dijkstra(朴素版)(kama47. 参加科学大会)
  • 无人机电机与螺旋桨的匹配原理及方法(一)
  • JavaSSM框架从入门到精通!第三天(MyBatis(二))!
  • Python训练营打卡Day40-简单CNN
  • 【51单片机数码管字符左移】2022-11-11
  • 如何低门槛自制Zigbee 3.0温湿度计?涂鸦上新开发包,开箱即用、完全开源
  • 开源AI编程工具Kilo Code的深度分析:与Cline和Roo Code的全面对比
  • Tiger任务管理系统-13
  • 【jar包启动,每天生成一个日志文件】
  • Unity UnityWebRequest高级操作
  • Ubuntu部署K8S集群
  • Jmeter+Jenkins接口压力测试持续集成
  • 【motion】基于标签重合度的匹配算法1:原理
  • 3D打印小批量低成本打印玩具工艺品模型-中科米堆CASAIM
  • 字节Seed-OSS开源,不卷参数卷脑子
  • 从零开始搭 Linux 环境:VMware 下 CentOS 7 的安装与配置全流程(附图解)
  • 如何修复“DNS服务器未响应”错误
  • AP服务发现PRS_SOMEIPSD_00160的解析
  • 开源版CRM客户关系管理系统源码包+搭建部署教程
  • 深度学习入门详解:从神经网络到实践应用
  • vggt复现
  • 正点原子【第四期】Linux之驱动开发学习笔记-2.1LED灯驱动实验(直接操作寄存器)
  • Mysql InnoDB 底层架构设计、功能、原理、源码系列合集【四、事务引擎核心 - MVCC与锁机制】
  • 【AI应用】向量数据库Milvus详细命令
  • 找不到vcruntime140_1.dll 无法执行的故障要怎么搞?解决方法分享
  • MiniCPM-V4.0开源并上线魔乐社区,多模态能力进化,手机可用,还有最全CookBook!
  • CVPR焦点 | 神经网络新范式:轻量化与精度并行,重塑视觉任务性能天花板
  • 树状数组【原理+详解+例题】