ref和reactive和.value

news/2025/10/24 8:48:17/文章来源:https://www.cnblogs.com/BKYNEKO/p/19162082

在 Vue 3 中,您描述的这种需要通过 .value 来访问值的特性,是 ref 函数所独有的。reactive 函数创建的对象没有这种统一的 .value 属性,其属性是直接访问的。

下面这个表格清晰地展示了两者的核心区别。

特性对比

ref

reactive

适用数据类型

基本类型(如字符串、数字、布尔值)和对象类型均可

仅适用于对象类型(包括对象、数组、Map、Set等)

是否存在 .value 属性

有。在 JavaScript 中操作数据必须使用 .value

无。直接访问或修改其属性即可

在模板中的使用

无需 .value,模板会自动解析(“解包”)

无需任何额外操作,直接使用属性

💡 深入理解 .value 和 reactive 的用法

    • ref 与 .value:ref 的工作原理是将一个数据包装在一个对象里,并将其保存在唯一的 value 属性下。这使得无论是基本类型还是对象类型,都能通过统一的 .value 接口进行响应式跟踪。当你需要读取或修改这个被“包裹”起来的值时,就必须通过 .value 属性 。
      // 定义 ref
    • let count = ref(0); // 基本类型
    • let user = ref({ name: 'Alice' }); // 对象类型
    • // 在 JavaScript 中操作
    • count.value++; // 正确:通过 .value 修改
    • user.value.name = 'Bob'; // 正确:访问 .value 上的属性
    • // 在模板中则自动解包,无需 .value
    • // <div>{{ count }}</div>
    • // <div>{{ user.name }}</div>
    • reactive 的用法:reactive 直接返回一个目标对象的响应式代理。因此,你可以像操作普通对象一样直接访问和修改它的属性,不需要也不存在一个顶层的 .value 属性 。
      // 定义 reactive 对象
    • const state = reactive({
    •   count: 0,
    •   user: { name: 'Alice' }
    • });
    • // 在 JavaScript 中直接操作属性
    • state.count++;
    • state.user.name = 'Bob';

    • 💎 如何选择
      简单来说,选择依据可以概括为:
      • 基本类型数据或将来可能需要整体替换的引用数据,使用 ref。
      • 逻辑上紧密关联的复杂对象或集合,且主要进行属性修改的,使用 reactive 。
    • 希望这个解释能帮你彻底弄清 ref 和 reactive 在 .value 上的区别。如果你在实际项目中遇到更具体的选择场景,欢迎随时提出,我们可以继续探讨。

 

 

 

 

是的,ref 完全可以用来定义对象。为了让你快速把握全貌,我先用一个表格来对比 ref 和 reactive 在处理对象时的核心差异,然后再详细解释其原理和用法。

特性

使用 ref 定义对象

使用 reactive 定义对象

是否需要 .value

需要。在 JS 中访问或修改对象,必须先通过 .value(如 obj.value.property)

不需要。直接访问或修改属性即可(如 obj.property)

模板中使用

无需 .value,模板会自动“解包”(如 {{ object.property }})

直接使用属性(如 {{ object.property }})

底层实现

内部自动调用 reactive 将对象转换为 Proxy

直接返回一个 Proxy 代理对象

重新赋值

可以直接对整个对象进行重新赋值(如 obj.value = newObject),保持响应性

直接重新赋值整个对象(如 obj = newObject)会丢失响应性

💡 理解 ref 定义对象的原理与用法

ref 的设计初衷是创建一个响应式的“引用”(reference),其核心是为数据包裹一个对象,并将值保存在 value 属性中。当这个值是一个对象时,Vue 为了使其具有深度响应性,会在内部自动调用 reactive 函数来处理它。这就是为什么你通过 ref 定义的对象也是一个响应式的 Proxy。

1. 在 JavaScript/TypeScript 中的操作

在脚本中,你必须通过 .value 来访问或修改对象。

import { ref } from 'vue';

 

// 使用 ref 定义对象

const userInfo = ref({

  name: '图图',

  age: 8,

  address: {

    city: '翻斗花园'

  }

});

 

// 读取属性

console.log(userInfo.value.name); // 输出 "图图"

// 修改嵌套属性

userInfo.value.address.city = '新的城市'; // 这是响应式的

// 重新赋值整个对象

userInfo.value = { name: '小美', age: 9 }; // 这同样是响应式的

 

2. 在模板中的使用

在模板中,Vue 会自动对 ref 进行“解包”,因此你无需再写 .value。

<template>

  <div>

    <p>姓名:{{ userInfo.name }}</p> <!-- 直接使用 userInfo.name -->

    <p>城市:{{ userInfo.address.city }}</p>

  </div>

</template>

 

⚠️ 注意事项与常见误区

  • 不要遗漏 .value:在脚本中直接操作 ref 对象本身是无效的,必须操作其 .value 属性。例如,userInfo.name = '新名字' 不会触发视图更新。
  • reactive 的重新赋值问题:与 ref 不同,如果你使用 reactive 定义了一个对象,直接给它赋一个新值(例如 state = { count: 1 })会破坏其响应式连接。如果需要替换 reactive 对象的多个属性,可以使用 Object.assign。
  • 深度响应性:ref 定义的对象默认是深度响应式的,嵌套属性的变化也会被追踪。

💎 如何选择:ref 还是 reactive?

  • 优先考虑 ref:当你不确定该如何选择时,优先使用 ref。因为它统一了基本类型和对象类型的用法,并且可以安全地进行整体替换,减少了因重新赋值导致响应式丢失的顾虑。
  • 考虑使用 reactive:当你有一个结构紧密、层级较深的复杂对象,并且不需要对整个对象进行重新赋值时,使用 reactive 可以使代码更简洁,因为无需一直写 .value。

总而言之,ref 是一个功能更通用、容错性更高的选择,特别是对于初学者或者在不明确的场景下。希望这个解释能帮助你更好地理解和使用 ref 来定义对象。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/944862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年工作服厂家推荐排行榜,防静电/劳保/国网/餐厅/工厂/电工/防酸碱/电力/车间/航空/员工工作服,文化衫/t恤/polo衫/冲锋衣/t恤衫公司精选

2025年工作服厂家推荐排行榜:防静电/劳保/国网等专业工装企业精选 在工业4.0时代背景下,工作服行业正经历着深刻变革。随着安全生产意识的提升和职场文化的演进,专业工作服已从简单的劳动保护用品,升级为集安全防护…

VSCode建立python虚拟环境

ctrl+shift+p打开命令行,选择: 然后选择: 之后选择存放虚拟环境的文件夹进行创建: 选择python版本:等待右下角创建完成微信搜索“Kconfig”,获取支持...

2025年10月深圳近视手术医生排名榜:五家医院真实数据对比

正在准备摘镜的你,也许已经翻遍社交平台,却被“全飞秒”“半飞秒”“ICL”绕得头晕;也许对比过价格,却发现同一术式报价相差数千元;更担心术后干眼、眩光、回退。深圳近视手术市场2025年预计年手术量突破12万例,…

2025年10月销毁公司推荐:森蓝领衔服务榜对比

把过期食品、瑕疵化妆品、积压文件或缺陷家电堆在仓库,不仅占地方,还可能因监管抽查被高额处罚;找回收站“一卖了之”,又担心流入二级市场带来品牌风险——这是生产、零售、电商、物流和公共机构在每年第四季度集中…

2025年危险品运输企业权威推荐榜:专业资质与安全口碑兼具的合规运输服务商精选

2025年危险品运输企业权威推荐榜:专业资质与安全口碑兼具的合规运输服务商精选 危险品运输作为特种物流领域的重要分支,其专业性和安全性要求远高于普通货物运输。随着我国化工产业的快速发展,危险品运输市场规模持…

P1600 [NOIP 2016 提高组] 天天爱跑步 分析

题目概述 题目链接:https://www.luogu.com.cn/problem/P1600。 给你一棵树,每个节点上有一个观察时间,现在有 \(m\) 个选手,选手会以每秒一个节点的速度,从 \(s_i\) 到 \(t_i\)。 求对于每个节点的观察时间能观察…

2025年10月上海装修公司推荐榜:千州装饰等五家深度对比

在上海这样的一线城市,装修不仅关乎居住舒适度,更直接影响房屋保值与生活质量。多数业主面临“预算有限、工期紧张、风格难定、增项频发”四大痛点,尤其在2025年三季度上海住宅成交环比回升12%的背景下,装修需求集…

2025年10月淡化痘印产品推荐对比:从色素代谢到修护通路全解析

痘印比痘痘更顽固,是多数人在“战痘”后期最耗心力的阶段。临床观察显示,炎症后色素沉着在东亚人群中发生率可达65%—80%,平均自然淡化周期3—6个月,若护理不当可延长至1年以上。2025年第三季度国家药监局《化妆品…

2025年10月上海装修公司对比榜:千州装饰等五强口碑解析

把钥匙交到装修公司手里,就像把未来生活的剧本交给导演:风格、预算、工期、环保、售后,任何一环掉链子,入住后都会变成“加长版遗憾”。上海家装市场年均开工量保持在12万套以上,2024年住宅装饰产值突破1100亿元,…

2025年10月敏感肌美白面霜推荐榜:淡斑修护综合排名

入秋以后,昼夜温差拉大,紫外线强度虽下降却更穿透,敏感肌人群常在换季期出现“红后反黑”——炎症褪去却留下顽固色沉。社交平台“美白+修护”关键词搜索量连续三周环比上升42%,其中“敏感肌可用”成为筛选首选项。…

SQL - 递归查询子节点

SQL - 递归查询子节点递归查询子节点:表a中有id, parent_id两个字段,parent_id存id的上一级id。请帮我写一个SQL语句,给定一个id,递归查询出所有子id,该id为第一列,后面每有一个子id增加一列。非常好,✅你的意思…

2025年10月色斑淡化产品对比榜:五款精华通路机制深度解析

入秋后紫外线强度虽降,但夏季累积的黑色素仍在表皮深处持续显色,不少人在10月前后首次发现色斑颜色加深或面积扩大。医美机构调研显示,每年9至11月咨询“居家淡斑”的消费者占比连续五年上升,2024年同比增长18.6%,…

2025年10月医美项目后用什么产品评测榜:术后舒缓精华口碑对比

刚做完光子、点阵或超皮秒,脸上又干又红,护肤品一抹就刺痛,这是不少医美用户的共同记忆。术后屏障暂时受损,外界刺激更容易引发色沉、反黑或持续潮红,选错护肤品等于把刚花出去的治疗费打折扣。国家药监局2024年医…

一些c语言特殊用法

C语言一些高级输出技巧与数组初始化 控制台颜色输出 完整颜色定义头文件 创建 colors.h 头文件: #ifndef COLORS_H #define COLORS_H// 重置所有属性 #define RESET "\033[0m"// 常规前景色 #define …

题解:P4204 [NOI2006] 神奇口袋

题意:口袋里有 \(t\) 种球,每种球初始有 \(a_i\) 个,每次从其中随机拿一个球并放回,同时再放入 \(d\) 个和拿出来球同种颜色的球。现在给出若干对 \((x_i,y_i)\),问同时满足第 \(x_i\) 次操作摸出来 \(y_i\) 这一…

2025年超声波检测设备厂家权威推荐榜:相控阵/高频/水浸/液冷板/钎焊超声波检测系统,技术实力与选购指南深度解析

2025年超声波检测设备厂家权威推荐榜:相控阵/高频/水浸/液冷板/钎焊超声波检测系统,技术实力与选购指南深度解析 行业背景与发展现状 超声波检测技术作为无损检测领域的重要组成部分,近年来在工业制造、航空航天、新…

2025年环氧板厂家推荐排行榜,环氧板加工,FR-4玻纤板,云母板,专业定制与优质材料供应商精选

2025年环氧板厂家推荐排行榜,环氧板加工,FR-4玻纤板,云母板,专业定制与优质材料供应商精选 随着电子电气、航空航天、轨道交通等高端制造业的快速发展,环氧板、FR-4玻纤板、云母板等高性能绝缘材料的需求持续增长…

sql server查看所有表名以及注释

下面是一个示例查询,它将返回带有序号的表名和注释: 使用 sys.tables 和 sys.extended_properties 表: SELECT ROW_NUMBER() OVER (ORDER BY t.name) AS 序号, t.name AS 表名, p.value AS 注释 FROM sys.tables AS…

SQL - 递归查询父节点

SQL - 递归查询父节点表a中有id, parent_id两个字段,parent_id存id的上一级id。请帮我写一个SQL语句,递归查询出一个id的所有parent_id,输出为一行数据多个列。 ChatGPT said:非常好的问题 👍 这是一个典型的树形…

2025.10.24——1绿

普及+/提高 P2886 [USACO07NOV] Cow Relays G 矩阵乘法优化DP/Floyd不需要啊,纯DP就能过……