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

前端学习笔记-vue中ref和reactive对比

没问题,去掉修饰,我们直接看底层的技术事实。

Vue 3 的响应式核心是利用 JavaScript 的Proxy对象来拦截数据的读取和修改。理解refreactive的区别,本质上是理解它们如何处理基本类型引用类型(对象/数组)的局限性。


1. 定义数据类型的区别

  • reactive(obj):它的底层直接使用new Proxy(obj, ...)。因为Proxy的第一个参数必须是对象,所以reactive只能接收对象、数组、Map、Set 等引用类型。如果传入数字、字符串、布尔值,Vue 会直接报错或警告。
  • ref(value):它可以接收任何类型的值。
  • 如果传入基本类型,Vue 会在内部创建一个拥有.value属性的对象,通过get value()set value()(即Object.defineProperty)来拦截对该属性的访问。
  • 如果传入的是对象,ref会在内部自动调用reactive来处理这个.value,也就是说ref.value此时变成了一个 Proxy 对象。

2. 内存地址替换(重新赋值)的区别

这是开发中最核心的逻辑区别。

reactive无法承受整体覆盖

当你执行reactive时,Vue 将响应式拦截器绑定到了当前的内存地址上。

letstate=reactive({count:1})// 错误操作:这改变了 state 指向的内存地址// 新的匿名对象没有被 Proxy 包装,原有的响应式链路断开state={count:2}

ref支持整体覆盖

ref变量指向的内存地址永远是那个特殊的响应式包裹对象(RefImpl)。

conststate=ref({count:1})// 正确操作:修改的是包装对象的 value 属性,而不是替换 state 本身// 底层会自动将新对象转为 reactive,响应式正常工作state.value={count:2}

3. 结构与参数传递中的响应式丢失

JavaScript 中基本类型的赋值是值传递,而对象的赋值是引用传递。这一特性导致了reactive在解构时会丢失响应式。

constposition=reactive({x:0,y:0})// 错误操作:相当于执行了 let x = 0;// 此时 x 变成了一个纯粹的数字,脱离了 position 对象的 Proxy 拦截let{x}=position

如果使用ref,即使将其作为参数传递给其他子函数,传递的也是该 Ref 对象的引用,.value上的拦截机制依然生效,因此不会丢失响应式。


4. 选型结论

在实际开发中,基于上述底层特性,通常遵循以下选型原则:

  • **必须用ref**
  1. 字符串、数字、布尔值等基本类型(例如控制显隐的isOpen,计数器count)。
  2. 需要从后端接口获取并整体替换的数组或对象(避免使用reactive后不得不遍历去push或使用Object.assign)。
  • **适用reactive**
  1. 结构固定的复杂对象,且内部属性高度关联(例如标准的表单提交对象const loginForm = reactive({ username: '', password: '' }))。
http://www.jsqmd.com/news/1091054/

相关文章:

  • 2026年会议记录软件推荐权威评测5大标准与3款首选工具
  • Kindle漫画转换终极指南:让你的电子阅读器变身漫画图书馆
  • 智慧医疗X光图像龋齿蛀牙识别分割数据集labelme格式3507张1类别
  • FastCut 大更新:第一个能让 Codex / ZCode 直接操刀的浏览器剪辑台
  • 别再折腾你的Android和后端开发了,拆解跨系统推送的正确接入姿势
  • [智能体-590]:thon是人工智能模型算法中的绝对的主流语言,智能体中主流编程语言有哪些?OpenClaw主流的编程语言为什么是JavaScript+TypeScript+Node.js?
  • 小学期进展
  • Day 2:Kotlin基础(一)
  • 终极iOS激活锁绕过解决方案:applera1n完整使用指南
  • AI编程实战:如何开发一个谷歌浏览器插件,并上架 Chrome 商店?
  • GHelper:为华硕笔记本量身打造的轻量级控制工具
  • 【学习记录】Week1:Pwntools 基础——连接、接收与发送 Payload 实操
  • Simple Runtime Window Editor:三步突破游戏分辨率限制,打造专业级截图工具
  • FSearch终极指南:Linux系统极速文件搜索完整教程
  • 社论:拥抱贾子理论大厦:AI时代中国思想主权的战略觉醒
  • 降AIGC平台红黑榜:实测3款热门工具,剖析实用程度与常见陷阱,文末附攻略
  • Codex 新手入门:别急着改代码,先学会这套安全流程
  • 文件上传漏洞攻防:从原理到实战的完整攻击链解析
  • Lightweight Charts终极指南:如何在5分钟内构建高性能金融可视化应用
  • 【Springboot毕设全套源码+文档】基于springboot智能阅读推荐系统的设计与实现(丰富项目+远程调试+讲解+定制)
  • 星盾(Starshield)与星链(Starlink)系统架构差异解析:PWSA框架下的军用低轨星座独立体系与作战应用
  • 终极指南:Jellyfin Bangumi插件让动漫库管理变得简单高效
  • AI驱动移动端自动化测试:从意图理解到工程实践
  • 别再熬夜写论文了!6款一键生成论文工具,一键极速生成超长篇幅!
  • Mi-Create开源表盘设计工具:可视化操作打造个性化小米手表表盘
  • 【学习记录】Week2(一):深入 ELF 结构视图与 .got/.plt 节区作用详解
  • 如何快速掌握NDS游戏文件编辑器:Tinke的完整使用指南
  • 还在愁论文框架搭不好?9款AI论文写作软件一键生成逻辑连贯初稿!
  • 程序员真正的天花板,不是技术,是表达
  • 如何彻底解决Cursor试用限制:从设备指纹识别到一键重置的完整指南