vue3中的toRaw API
文章目录
- 什么是toRaw API?
- 为什么需要toRaw?
- 如何使用toRaw?
- 实际应用场景

这两天在写项目的时候,发现了一个之前没用过的api,于是上网查了一下,发现这个api还是挺常用,所以在这记录一下
什么是toRaw API?
toRaw 是 Vue 3 中的新工具,用于获取一个响应式对象的原始对象。Vue 3 中引入了响应式代理,这意味着我们通常处理的是被代理的对象,而不是原始对象。toRaw 提供了一种方式,可以绕过代理,直接访问和操作原始数据。
为什么需要toRaw?
在某些情况下,直接操作原始对象比操作响应式代理更有效。以下是一些常见的场景:
- 调试和日志记录:在调试或记录对象时,直接输出代理对象可能会导致混淆,使用toRaw可以更清晰地看到原始数据。
- 性能优化:有时我们需要跳过代理机制进行一些性能关键的操作,这时toRaw可以派上用场。
- 库和插件开发:如果你在开发Vue插件或库,可能需要处理原始对象而不是响应式代理。
如何使用toRaw?
使用toRaw非常简单。它是一个从vue包中导出的函数,接受一个响应式对象并返回其原始对象。以下是一个基本示例:
import { reactive, toRaw } from 'vue';const state = reactive({count: 0,nested: {message: 'Hello, Vue 3!'}
});// 获取原始对象
const rawState = toRaw(state);console.log(rawState); // { count: 0, nested: { message: 'Hello, Vue 3!' } }// 修改原始对象不会触发响应式更新
rawState.count = 1;
console.log(state.count); // 0// 修改响应式对象会正常工作
state.count = 2;
console.log(state.count); // 2
console.log(rawState.count); // 2
在这个示例中,我们首先创建了一个响应式对象state。然后,我们使用toRaw获取了这个响应式对象的原始对象rawState。可以看到,对原始对象的修改不会触发响应式更新,而对响应式对象的修改则会同步到原始对象。
实际应用场景
1、调试和日志记录
在调试复杂的响应式对象时,直接查看代理对象可能会让人困惑。使用toRaw可以更清晰地查看对象的实际结构。
import { reactive, toRaw } from 'vue';const state = reactive({user: {name: 'Alice',age: 25}
});
console.log(toRaw(state));
2、性能优化
在处理大量数据时,跳过响应式代理进行操作可以提高性能。例如,在大型列表的批量更新中,直接操作原始对象会更高效。
import { reactive, toRaw } from 'vue';const list = reactive([...Array(10000).keys()]);const rawList = toRaw(list);// 直接操作原始数组,提高性能
rawList.forEach((item, index) => {rawList[index] = item * 2;
});console.log(list[0]); // 0,因为没有触发响应式更新
console.log(rawList[0]); // 0,因为我们直接修改的是原始对象
3、库和插件开发
在开发Vue插件或库时,可能需要处理原始对象而不是代理对象。例如,在创建一个深拷贝函数时,使用toRaw可以避免循环引用和代理对象带来的问题。
import { reactive, toRaw } from 'vue';function deepClone(obj) {if (obj === null || typeof obj !== 'object') {return obj;}const cloned = Array.isArray(obj) ? [] : {};for (const key in obj) {cloned[key] = deepClone(toRaw(obj[key]));}return cloned;
}const state = reactive({user: {name: 'Bob',age: 30}
});const clonedState = deepClone(state);
console.log(clonedState); // { user: { name: 'Bob', age: 30 } }
总的来说,toRaw 是 Vue 3 中一个非常有用的工具,它允许我们直接访问和操作响应式对象的原始数据。在调试、性能优化以及库和插件开发中,toRaw 都能发挥重要作用。通过本文的介绍,希望你对toRaw有了更深入的理解,并能在实际项目中灵活运用它。
相关文章:
vue3中的toRaw API
文章目录 什么是toRaw API?为什么需要toRaw?如何使用toRaw?实际应用场景 这两天在写项目的时候,发现了一个之前没用过的api,于是上网查了一下,发现这个api还是挺常用,所以在这记录一下 什么是t…...
接口响应断言-json
json认识JSONPath源码类学习/json串的解析拓展学习 目的:数据返回值校验测试 json认识 json是什么-是一种数据交换格式,举例平时看到的json图2,在使用中查看不方便,会有格式转化的平台,json格式的展示 JSON在线视图…...
全面盘点多模态融合算法及应用场景
关注作者,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕博,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人 多…...
超分论文走读
codeFormer 原始动机 高度不确定性,模糊到高清,存在一对多的映射纹理细节丢失人脸身份信息丢失 模型实现 训练VQGAN 从而得到HQ码本空间作为本文的离散人脸先验。为了降低LQ-HQ映射之间的不确定性,我们设计尽量小的码本空间和尽量短的Code…...
Android ViewPager2 + FragmentStateAdapter 的使用以及问题
场景介绍:在Android业务功能开发的过程中,需要使用到嵌套ViewPage2实现页面切换,这种场景在我们的开发过程中并不少见,大致结构为一个activity包含一个viewPage2,这个viewPage2中存在一个fragment A,fragme…...
FPGA中的乒乓操作
为什么不直接选用一个缓存更大的FIFO而选用乒乓操作为什么乒乓操作可以实现低速处理高速数据乒乓操作适用哪些场景 一、乒乓操作结构 首先先介绍一下乒乓操作的原理,其结构如下: 输入选择单元负责将数据送到数据缓冲模块,然后输出选择单元负…...
gnocchi学习小结
背景 总结gnocchi 4.4版本gnocchi-metricd工作流程 入口 gnocchi.cli.metricd metricd stop after processing metric默认为0,调servicemanager run MetricdServiceManager __init__ 服务逻辑封装到MetricdServiceManager初始化中 主要由MetricProcessor, Met…...
【机器学习】Pandas中to_pickle()函数的介绍与机器学习中的应用
【机器学习】Pandas中to_pickle()函数的介绍和机器学习中的应用 🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地!🎇 &#…...
lightning的hook顺序
结果 setup: 训练循环开始前设置数据加载器和模型。 configure_optimizers: 设置优化器和学习率调度器。 on_fit_start: 训练过程开始。 on_train_start: 训练开始。 on_train_epoch_start: 每个训练周期开始。 on_train_batch_start: 每个训练批次开始。 on_before_bac…...
【ARFoundation自学03】AR Point Cloud 点云(参考点标记)功能详解
和平面识别框架一样 1为XR Origin添加AR Point Cloud Manager组件 然后你的ar应用就具备了点云识别功能,就这么简单 2.可视化这些云点 创建一个美术效果的预制体,人家提供了预设模板 然后拖到仓库(ASSETS)创建预制体ÿ…...
x264 码率控制中实现 VBV 算法源码分析
关于 VBV 的解释与原理可以参考x264 码率控制 VBV 原理。 x264中 VBV 算法执行的流程 vbv 参数配置相关函数 x264_param_default函数 功能:编码参数默认设置,关于 vbv的参数的默认设置;函数内vbv相关代码:/* ... */ //代码有删减 param->rc.i_vbv_max_bitrate = 0; par…...
宝兰德入选“鑫智奖·2024金融数据智能运维创新优秀解决方案”榜单
近日,由金科创新社主办、全球金融专业人士协会支持的“2024 鑫智奖第六届金融数据智能优秀解决方案”评选结果正式公布。凭借卓越的技术实力和方案能力,宝兰德「智能全链路性能监控解决方案」从90个参选方案中脱颖而出,荣誉入选“鑫智奖2024金…...
Unity3D雨雪粒子特效(Particle System)
系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、下雨的特效1-1.首先就是创建一个自带的粒子系统,整几张贴图,设置一下就能实现想要的效果了1-2 接着往下看视频效果 👉二、下雪的特效👉三、下雪有积雪的效果3-1 先把控…...
记录使用自定义编辑器做试题识别功能
习惯了将解析写在代码注释,这里就直接上代码啦,里面用到的bxm-ui3组件库是博主基于element-Plus做的,可以通过npm i bxm-ui3自行安装使用 // 识别方法: // dom 当前识别数据所在区域, questionType 当前点击编辑选择的题目类型&a…...
MySQL索引和视图
MySQL索引和视图是关系型数据库MySQL中的两个重要概念。索引用于优化数据库的查询性能,而视图用于提供一个逻辑上的表结构,方便用户查询和操作数据。 索引是一种数据结构,可以加速对数据库表中的数据进行查询的速度。通过创建索引࿰…...
Java单元测试Mock的用法,关于接口测试的用例
Testvoid getAllTradeDateList() {// 创建模拟对象Bc6CalculateService calculateService Mockito.mock(Bc6CalculateService.class);String allTradeDateListStr ExcelUtil.excelToJsonStr("bc6/NibTradeDate.xlsx");// 设置模拟行为List<NibTradeDateCloudDto…...
《心理学报》文本分析技术最新进展总结盘点
这些研究展示了文本分析在多个心理学领域内的强大应用,包括情境判断测验的自动化评分、自闭症儿童教育干预的学习效果评估、中文文本阅读的词切分和词汇识别机制、网络突发事件的负性偏向分析,以及小学生羞怯特质的预测与语言风格模型构建。通过采用机器…...
json格式文件备份redis数据库 工具
背景: 项目组要求使用 json备份redis缓存数据库内容。 附件里工具是一个包含redis-dump工具的镜像文件,方便用户在局域网中使用容器备份redis缓存数据库。 使用步骤: 解压tar文件,导入镜像 docker load < redis_dump_of_my…...
JAVA系列:NIO
NIO学习 一、前言 先来看一下NIO的工作流程图: NIO三大核心组件,channel(通道)、Buffer(缓冲区)、selector(选择器)。NIO利用的是多路复用模型,一个线程处理多个IO的读…...
偏微分方程算法之抛物型方程差分格式编程示例二
目录 一、研究问题 二、C++代码 三、结果分析 一、研究问题 采用向后欧拉格式计算抛物型方程初边值问题:...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
