Vue 3 中 ref 与 reactive 的对比

Vue 3 中 ref 与 reactive 的对比

  • Vue 3 中 ref 与 reactive 的对比
    • 一、定义和基本使用
      • ref
      • reactive
    • 二、响应式原理
      • ref
      • reactive
    • 三、适用场景
      • ref
      • reactive
    • 四、注意事项
      • ref
      • reactive

Vue 3 中 ref 与 reactive 的对比


在 Vue 3 中,refreactive 都是用于创建响应式数据的方法,但它们在使用方式、应用场景等方面存在一些差异,以下是详细对比:


一、定义和基本使用

ref

  • 定义:ref 用于创建一个响应式的引用对象,它可以包裹任何类型的值,包括基本数据类型(如数字、字符串、布尔值等)和对象。
  • 基本使用:通过 ref 函数创建一个响应式引用,使用时需要通过 .value 来访问和修改其值。
import { ref } from 'vue'; const count = ref(0); 
// 访问值 
console.log(count.value); 
// 修改值 
count.value = 1; 

reactive

  • 定义:reactive 用于创建一个响应式对象,它只能接受一个普通对象作为参数,并返回该对象的响应式代理。
  • 基本使用:直接使用 reactive 函数将一个普通对象转换为响应式对象,访问和修改其属性时无需额外的 .value
import { reactive } from 'vue'; const state = reactive({ name: 'John', age: 30 
}); 
// 访问属性 
console.log(state.name); 
// 修改属性 
state.age = 31; 

二、响应式原理

ref

  • ref 是基于 Object.defineProperty()Proxy(取决于运行环境)实现的。它将传入的值包装在一个对象中,并通过 gettersetter 来实现响应式。当值发生变化时,Vue 会自动更新与之绑定的 DOM。

reactive

  • reactive 是基于 Proxy 实现的。它会创建一个对象的代理,拦截对象的属性访问和修改操作,从而实现响应式。这意味着 reactive 可以对对象的深层属性进行响应式追踪。

三、适用场景

ref

  • 基本数据类型:当需要创建响应式的基本数据类型时,ref 是首选。因为基本数据类型不是对象,无法直接使用 reactive
  • 模板中使用:在模板中使用 ref 时,Vue 会自动解包 .value,可以直接使用 {{ count }} 来显示值。
  • 与外部库集成:在与一些需要原始值的外部库集成时,ref 可以方便地提供原始值。

reactive

  • 复杂对象:当需要创建响应式的复杂对象时,reactive 更为合适。它可以直接处理对象的属性,无需额外的 .value 操作。
  • 对象嵌套:对于嵌套对象,reactive 可以自动处理深层属性的响应式,无需手动为每个嵌套对象创建 ref

四、注意事项

ref

  • 解构赋值:对 ref 进行解构赋值会失去响应式。如果需要解构 ref 并保持响应式,可以使用 toRefs 函数。
import { ref, toRefs } from 'vue'; const state = ref({ name: 'John', age: 30 
}); 
// 解构后失去响应式 
const { name, age } = state.value; 
// 使用 toRefs 保持响应式 
const { name, age } = toRefs(state.value); 

reactive

  • 对象替换:不能直接将 reactive 对象替换为另一个对象,否则会失去响应式。如果需要替换对象,可以使用 reactive 重新创建一个响应式对象。
import { reactive } from 'vue'; const state = reactive({name: 'John', age: 30 
}); 
// 错误:失去响应式 
state = reactive({ name: 'Jane', age: 25 
}); 

综上所述,refreactive 在 Vue 3 中都有各自的优势和适用场景,开发者可以根据具体需求选择合适的方法来创建响应式数据。

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

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

相关文章

《Vue.js组件化开发实战:从安全纵深到性能跃迁》

开篇:组件化开发的工业革命 当全球500强企业的核心业务系统在12.12大促中经受每秒38万次请求冲击时,我们突然意识到:现代前端组件已不再是简单的UI积木,而是承载业务逻辑、安全防护、性能优化的纳米级作战单元。本文将从军工级系统…

从0到1的Python接口自动化学习路线

Python 是一门非常适合初学者且功能强大的编程语言,它在接口自动化测试领域具有广泛应用。 以下是一份针对 Python 与接口自动化测试的详细学习路线,帮助你从零开始学习并逐步掌握相关知识。 第一阶段:Python基础 目标:掌握 Python 基本语法和编程能力。 一、学习内容 1.…

HDCP(五)

HDCP 2.2 测试用例设计详解 基于HDCP 2.2 CTS v1.1规范及协议核心机制,以下从正常流程与异常场景两大方向拆解测试用例设计要点,覆盖认证、密钥管理、拓扑验证等关键环节: 1. 正常流程测试 1.1 单设备认证 • 测试目标:验证源设…

国标GB28181协议EasyCVR视频融合平台:5G时代远程监控赋能通信基站安全管理

一、背景介绍 随着移动通信行业的迅速发展,无人值守的通信基站建设规模不断扩大。这些基站大多建于偏远地区,周边人迹罕至、交通不便,给日常的维护带来了极大挑战。其中,位于空旷地带的基站设备,如空调、蓄电池等&…

A2L文件解析

目录 1 摘要2 A2L文件介绍2.1 A2L文件作用2.2 A2L文件格式详解2.2.1 A2L文件基本结构2.2.2 关键元素与声明2.2.3 完整A2L文件示例 3 总结 1 摘要 A2L文件(也称为ASAP2文件)是ECU开发的核心接口文件,用于标定、测量和诊断的关键配置文件&…

光学工程考研调剂推荐

一、调剂院校推荐 1. 华南农业大学 • 调剂分数参考:光学工程调剂生分数通常在300分左右,过国家线即可尝试。例如,2023年有297分考生成功调剂至此。 • 优势:对分数要求相对宽松,适合分数接近国家线的考生。 2. 安…

SQLite 注入:深入理解与防范策略

SQLite 注入:深入理解与防范策略 引言 SQLite,作为一款轻量级的数据库,被广泛应用于嵌入式系统、移动应用以及个人电脑中。尽管SQLite以其简单易用而受到青睐,但其安全机制若不恰当配置,则可能面临注入攻击的风险。本文旨在深入探讨SQLite注入的原理、类型及防范策略。 …

汽车与航空航天领域软件维护:深度剖析与未来展望

一、引言 在当今科技飞速发展的时代,汽车和航空航天领域的软件应用愈发广泛和深入,软件已成为这些行业系统的核心组成部分。从汽车的智能驾驶辅助系统到航空航天飞行器的飞行控制软件,软件的可靠性、安全性直接关系到整个系统的正常运行和人…

Jupyter notebook使用技巧

一、打开指定文件夹 在快捷方式目标中,使用如下代码 anaconda3\python.exe anaconda3\cwp.py anaconda3 anaconda3\python.exe anaconda3\Scripts\jupyter-notebook-script.py --notebook-dirD:\code\python

车辆视频检测器linux版对于密码中包含敏感字符的处理方法

由于密码中含有敏感字符,导致前端页面异常,图标变灰,坐标拾取打不开图像等,主要原因是:密码比较前后不一致,左边是Abc_110,右边是:Abc_110%2B,对于此问题,特别…

移动端六大语言速记:第12部分 - 测试与优化

移动端六大语言速记:第12部分 - 测试与优化 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言在测试与优化方面的特性,帮助开发者理解和掌握各语言的测试框架和性能优化技巧。 12. 测试与优化 12.1 单元测试框架对比 各语言单元测试框架…

Java—HTML:3D形变

今天我要介绍的是在Java HTML中CSS的相关知识点内容之一:3D形变(3D变换)。该内容包含透视(属性:perspective),3D变换,3D变换函数以及案例演示, 接下来我将逐一介绍&…

模拟-与-现实协同训练:基于视觉机器人操控的简单方法

25年3月来自 UT Austin、Nvidia、UC Berkeley 和纽约大学的论文“Sim-and-Real Co-Training: A Simple Recipe for Vision-Based Robotic Manipulation”。 大型现实世界机器人数据集在训练通才机器人模型方面拥有巨大潜力,但扩展现实世界人类数据收集既耗时又耗资…

电子电气架构 --- 为配备区域计算的下一代电子/电气(E/E)架构

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…

【UE】渐变框材质

效果 步骤 新建一个材质,这里命名为“M_GlowingBorder”,打开“M_GlowingBorder”后,设置材质域为“用户界面”,混合模式为“半透明” 添加如下节点: 代码: Begin Object Class/Script/UnrealEd.Materia…

CTF web入门之爆破

爆破 web21: 打开burp进行抓包 通过对密码进行解析。得知密码是由拼接而来 admin:1 选择要攻击的参数 攻击方式。 选择payload方式 。。添加参数 1,2,3。账号 分隔符 密码 选择加密方式。添加buse64.去掉url字符。不然buse64后,会在url加密过一次,从而导致攻击不成…

openstack搭建过程,脚本

虚拟机镜像资源挂载镜像资源百度网盘分享 通过网盘分享的文件:CentOS-7-x86_64-Minimal-2009.iso 链接: https://pan.baidu.com/s/1Lze6okcQQ3gHS95jChy_tg?pwdfghe 提取码: fghe --来自百度网盘超级会员v3的分享 通过网盘分享的文件:openStack-train.…

python三大库之---pandas(二)

python三大库之—pandas(二) 文章目录 python三大库之---pandas(二)六,函数6.1、常用的统计学函数6.2重置索引6.3 遍历6.3.1DataFrame 遍历6.3.2 itertuples()6.3.3 使用属性遍历 6.4 排序6.4.1 sort_index6.4.2 sort_…

数据库主从复制学习笔记

目录 一、Binlog(Binary Log) 核心特性 核心用途 Binlog 格式(3种类型) 二、主从复制 核心原理 主库(Master) 从库(Slave) 配置步骤(以 MySQL 为例) …

宁德时代25年春招笔试演绎数字推理SHL测评题库

宁德时代校招测评包含演绎推理数字推理两部分,请单击以下链接进行测评,详细操作指引请参见如下指引,请在测试前了解,大约用时60分钟。正式测评有两个部分:数字推理18分钟演绎推理18分钟,数字推理共10题,演绎…