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

ref 和 reactive

文章目录

    • ref 和 reactive
      • 一、差异
      • 二、能否替代的场景分析
        • (1)基本类型数据
        • (2)对象类型数据
        • (3)数组类型数据
        • (4) 需要整体替换的场景
      • 三、替代方案与兼容写法
        • 1. 用 reactive 模拟 ref
        • 2. 用 ref 模拟 reactive
      • 四、最佳实践建议
      • 五、性能对比
      • 六 结论:

ref 和 reactive

一、差异

在这里插入图片描述

特性refreactive
适用类型任意类型(包括基本类型)仅对象/数组
访问对象需要通过 .value直接访问属性
整体替换✅支持(直接赋值)❌不支持(需要特殊处理)
解构保持相应性❌需要配合 toRef❌需要配合 toRef
性能开销较低(仅包装一层)较高(深度代理)

二、能否替代的场景分析

(1)基本类型数据
// ✅ 必须用 ref
const count = ref(0); // 正确
const count = reactive(0); // ❌ 错误(reactive 只能处理对象)
(2)对象类型数据
// ✅ 可以用 reactive 替代 ref
const objRef = ref({ a: 1 });
const objReactive = reactive({ a: 1 });// 访问方式差异
console.log(objRef.value.a); // ref 需要 .value
console.log(objReactive.a);  // reactive 直接访问
(3)数组类型数据
// ✅ 可以用 reactive 替代 ref
const arrRef = ref([1, 2, 3]);
const arrReactive = reactive([1, 2, 3]);// 修改操作差异
arrRef.value.push(4);   // ref 需要 .value
arrReactive.push(4);    // reactive 直接操作
(4) 需要整体替换的场景
// ✅ 必须用 ref
const state = ref({ a: 1 });
state.value = { a: 2 }; // ✅ 正确// ❌ reactive 无法直接替换
const state = reactive({ a: 1 });
state = { a: 2 }; // ❌ 错误(失去响应性) 

三、替代方案与兼容写法

1. 用 reactive 模拟 ref
// 通过 reactive 包装单属性对象
const count = reactive({ value: 0 });
console.log(count.value); // 访问方式与 ref 一致
2. 用 ref 模拟 reactive
// 通过 ref 包装对象
const obj = ref({ a: 1 });
console.log(obj.value.a); // 访问时需要 .value

四、最佳实践建议

  1. 基本类型 → 必须用 ref
  2. 对象/数组 → 优先用 reactive(除非需要整体替换)
  3. 复杂数据结构 → 混合使用:
const state = reactive({count: ref(0),       // 嵌套 refuser: reactive({     // 嵌套 reactivename: 'Alice'})
});
  1. 模板中使用 → 优先用 reactive(避免频繁 .value)

五、性能对比

操作refreactive
创建响应式对象⭐快⭐⭐慢
属性访问⭐⭐⭐快⭐⭐快
数组修改⭐⭐中⭐⭐⭐快
整体替换⭐⭐⭐快❌不支持

六 结论:

不能简单用 reactive 完全替代 ref,但可以根据数据类型和使用场景选择:

  • 基本类型 → 必须用 ref
  • 对象/数组 → 优先用 reactive
  • 需要整体替换 → 必须用 ref
  • 模板中直接访问 → 优先用 reactive(减少 .value 噪音)
http://www.xdnf.cn/news/15247.html

相关文章:

  • 详解Linux下多进程与多线程通信(一)
  • Kafka——Kafka 线上集群部署方案怎么做?
  • 解决 Python 跨目录导入模块问题
  • git实际工作流程
  • Java 大视界 -- Java 大数据在智能教育学习资源智能分类与标签优化中的应用(346)
  • [2025CVPR]DenoiseCP-Net:恶劣天气下基于LiDAR的高效集体感知模型
  • 若依框架集成阿里云OSS实现文件上传优化
  • 基于requests_html的爬虫实战
  • 「小程序开发」项目结构和页面组成
  • java: DDD using oracle 21c
  • 多级@JsonTypeInfo和@JsonSubTypes注解使用详解及场景分析
  • opencv python 基本操作
  • Python自动化:每日销售数据可视化
  • 日志系统 on Linux C/C++
  • STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南
  • Datawhale AI夏令营——基于带货视频评论的用户洞察挑战赛
  • 关于 java:11. 项目结构、Maven、Gradle 构建系统
  • Cesium初探-CallbackProperty
  • 【算法分析与设计】研究生第二次算法作业:基于分治策略的有序数组中位数查找与逆序对计数 latex源码和pdf
  • 五、深度学习——CNN
  • 卫星通信终端天线的5种对星模式之二:DVB跟踪
  • FastAdmin项目开发三
  • Anthropic:从OpenAI分支到AI领域的领军者
  • ubuntu18.04 升级Ubuntu 20.04
  • Transformer基础
  • L1正则化 VS L2正则化
  • c++中的STL
  • Redis 实现分布式锁
  • Kotlin文件操作
  • 2025 年 4-6 月大模型备案情况分析