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

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.dtcms.com/a/343721.html

相关文章:

  • FFmpeg及 RTSP、RTMP
  • 大型前端项目如何实现css 隔离:利用浏览器原生的 Shadow DOM 完全隔离 DOM 结构与样式...
  • 前端AI工具——TRAE
  • Linux基础命令大全:从入门到熟练
  • 开发避坑指南(34):mysql深度分页查询优化方案
  • GitCode 疑难问题诊疗:全面指南与解决方案
  • 关于在 IntelliJ IDEA 中安装和配置 Java 17
  • 简单聊聊多模态大语言模型MLLM
  • RabbitMQ 应用问题
  • RabbitMQ深度剖析:从基础到高级进阶实战
  • RabbitMQ 全面指南:架构解析与案例实战
  • 线性回归学习笔记
  • k8s——持久化存储 PVC
  • 自定义rabbitmq的ConnectionFactory配置
  • uniapp轮播 轮播图内有定位样式
  • uniappx鸿蒙适配
  • 2025年视频大模型汇总、各自优势及视频大模型竞争焦点
  • 2025年5月架构设计师综合知识真题回顾,附参考答案、解析及所涉知识点(七)
  • 蓝牙学习--连接蓝牙播放音乐无声的分析步骤
  • Matplotlib 可视化大师系列(六):plt.imshow() - 绘制矩阵与图像的强大工具
  • 【大语言模型 13】Dropout与正则化技术全景:深度网络过拟合防御的终极武器
  • 什么是短视频矩阵系统企业立项功能源码开发,支持OEM
  • Flask 之 Cookie Session 详解:用户状态管理
  • 了解 PostgreSQL 的 MVCC 可见性基本检查规则
  • Apache Flink集群架构:核心角色与协同机制
  • 【ElasticSearch】使用docker compose,通过编写yml安装es8.15和kibana可视化界面操作,go连接es
  • 为什么需要关注Flink并行度?
  • 使用 Apache Flink CDC 3.0 实现 MySQL 到 Elasticsearch 的数据同步
  • 回归测试的重要性与实践指南
  • 十年磨一剑!Apache Hive 性能优化演进全史(2013 - )