Vue3中readonly 与 shallowReadonly的使用区别?

news/2024/5/3 10:34:07/文章来源:https://blog.csdn.net/weixin_59763367/article/details/130123210

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
    • readonly
    • 强行修改readonly:


前言

readonly:
让一个响应式数据变为只读的(深只读)。
shallowReadonly
让一个响应式数据变为只读的(浅只读)。

应用场景: 不希望数据被修改时。

readonly

我们在代码中定义了一个响应式对象person 然后使用readonly(person )方法传入person 返回一个只读的对象 用p接收并返回
<template><div><h1>姓名:{{ name }}</h1><h2>年龄:{{ age }}</h2><h3>喜欢的水果:{{ likeFood.fruits.apple }}</h3><button @click="name += '~'">修改姓名</button><button @click="age++">修改年龄</button><button @click="likeFood.fruits.apple += '!'">修改水果</button></div>
</template><script>
import { reactive, toRefs, readonly } from "vue";
export default {name: "App",setup() {// 定义了一段数据let person = reactive({name: "张三",age: 18,likeFood: {fruits: {apple: "苹果",},},});// 使用了readonly将对象变为只读let p = readonly(person);console.log(p);// 将数据返回出去return {...toRefs(p),};},
};
</script>

强行修改readonly:

我们点击修改数据按钮 因为属性是只读的 所以浏览器提示无法修改此属性

在这里插入图片描述
shallowReadonly

 使用shallowReadonly (person )方法传入person 返回一个只读的对象 用p接收并返回
<template><div><h1>姓名:{{ name }}</h1><h2>年龄:{{ age }}</h2><h3>喜欢的水果:{{ likeFood.fruits.apple }}</h3><button @click="name += '~'">修改姓名</button><button @click="age++">修改年龄</button><button @click="likeFood.fruits.apple += '!'">修改水果</button></div>
</template><script>
import { reactive, toRefs, shallowReadonly  } from "vue";
export default {name: "App",setup() {// 定义了一段数据let person = reactive({name: "张三",age: 18,likeFood: {fruits: {apple: "苹果",},},});// 使用了shallowReadonly将对象变为只读let p = shallowReadonly(person);console.log(p);// 将数据返回出去return {...toRefs(p),};},
};
</script>

shallowReadonly强行修改结果:
因为apple是深层次的,不受管控
在这里插入图片描述

使用场景:
万一这个person的数据是别的组件定义传给你的,别的组件传给你只希望你使用不希望你修改的情况下,你怕自己组件内业务逻辑可能会修改它,所以用readonly和shallowReadonly函数去修饰,然后用readonly(person)包裹后新生成的person对象就可以达到效果了,哪怕你修改新生成person对象属性,也不会影响原有的person对象的属性。

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

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

相关文章

Docker Registry 本地镜像发布到私有库

本地镜像发布到私有库流程 是什么1 官方Docker Hub地址&#xff1a;https://hub.docker.com/&#xff0c;中国大陆访问太慢了且准备被阿里云取代的趋势&#xff0c;不太主流。2 Dockerhub、阿里云这样的公共镜像仓库可能不太方便&#xff0c;涉及机密的公司不可能提供镜像给公…

Java实现打印杨辉三角形,向左、右偏的平行四边形这三个图形代码程序

目录 前言 一、打印杨辉三角形 1.1运行流程&#xff08;思想&#xff09; 1.2代码段 1.3运行截图 二、向左偏的平行四边形 1.1运行流程&#xff08;思想&#xff09; 1.2代码段 1.3运行截图 三、向右偏的平行四边形 1.1运行流程&#xff08;思想&#xff09; 1.2代…

WebServer项目->计网知识补充

c大项目[WebServer项目]->计网知识补充1.网络结构模式C/S结构B/S结构2.MAC 地址3.IP 地址1)IP 地址编址方式2)A类IP地址3)B类IP地址4)C类IP地址5)D类IP地址(了解)6)特殊的网址7)子网掩码4.端口5.网络模型1)OSI 七层参考模型&#xff08;Open System Interconnection&#xf…

HTML5 <img> 标签

HTML5 <img> 标签 实例 HTML5 <img>标签用于向网页中添加相关图片。 如何插入图像&#xff1a; <img src"smiley-2.gif" alt"Smiley face" width"42" height"42">尝试一下 &#xff08;更多实例见页面底部&…

CUDA编程基础与Triton模型部署实践

作者&#xff1a;王辉 阿里智能互联工程技术团队 近年来人工智能发展迅速&#xff0c;模型参数量随着模型功能的增长而快速增加&#xff0c;对模型推理的计算性能提出了更高的要求&#xff0c;GPU作为一种可以执行高度并行任务的处理器&#xff0c;非常适用于神经网络的推理计算…

RISC-V Linux 编译设备树

RISC-V Linux 编译设备树 flyfish 设备树是一种描述硬件资源的数据结构 引入设备树的主要目的 曾经 Linux内核中夹杂着大量的设备信息&#xff0c;影响Linux驱动开发效率&#xff0c;因为外部设备发生任何改动&#xff0c;需要重新编写和编译驱动代码。 现在 设备驱动程…

九龙证券|300亿空袭,港股吓懵了!

港股再度大幅回调&#xff0c;腾讯成了“导火索”。 当地时刻4月11日&#xff0c;腾讯大股东Prosus发布公告称拟再度进行回购&#xff0c;作为回购方案的一部分&#xff0c;Prosus本周将采纳行动&#xff0c;把9600万股腾讯股票以凭据方式移入香港中心结算系统&#xff0c;以便…

PyQt5学习笔记一、安装PyQt5和在PyCharm中配置工具

一、安装PyQt5 1. 可以在cmd窗口安装PyQt5和工具 可以在cmd窗口使用命令 pip install PyQt5 安装PyQt5&#xff0c;若指定版本使用命令 pip install PyQt5version&#xff0c;此时同时安装了PyQt5和sip。参考链接 在cmd命令窗口安装Python模块_Mr. 李大白的博客-CSDN博客htt…

【《C Primer Plus》读书笔记】第17章:高级数据表示

【《C Primer Plus》读书笔记】第17章&#xff1a;高级数据表示17.1 研究数据表示17.2 从数组到链表17.3 抽象数据类型&#xff08;ADT&#xff09;17.4 队列ADT17.5 用队列进行模拟17.6 链表和数组17.7 二叉查找树17.8 其他说明17.1 研究数据表示 在开始编写代码之前&#xf…

【Android入门到项目实战-- 5.1】—— 广播(一):接收系统广播

目录 一、什么是广播&#xff1f; 二、广播的类型 标准广播 有序广播 三、接收系统广播 1、动态注册监听网络变化 如何注册广播接收器&#xff1f; 2、静态注册实现开机启动 使用快捷方式创建广播接收器 实现开机广播 一、什么是广播&#xff1f; android广播机制就是…

Java高级特性 - 多线程基础(1)使用线程第1关:创建线程第2关:使用 Callable 和 Future 创建线程

目录 第1关&#xff1a;创建线程 头歌知识点总结&#xff1a; 第2关&#xff1a;使用 Callable 和 Future 创建线程 本题头歌知识点 本题详解&#xff1a; 第1关&#xff1a;创建线程 package step1; //请在此添加实现代码 //使用继承Thread类的方式创建一个名为 Thread…

【C++项目】高并发内存池

前言&#xff1a; 本篇博客大致记录基于tcmalloc实现高并发内存池的思想与实现方案。 使用语言&#xff1a;C&#xff0c;编译器&#xff1a;vs2022&#xff0c;开始时间&#xff1a;2023/4/3&#xff0c;结束时间&#xff1a;2023/4/12。 项目源码地址&#xff1a;Cproject: 我…

苹果智能戒指专利曝光,Find My技术加持不易丢

根据美国商标和专利局&#xff08;USPTO&#xff09;公示的清单&#xff0c;苹果近日获得了一项“智能戒指”相关的设计专利&#xff0c;编号为“US 11625098 B2”。 这款智能戒指专利主要服务于增强现实&#xff08;AR&#xff09;或者虚拟现实&#xff08;VR&#xff09;场…

C语言CRC-16 MAXIM格式校验函数

C语言CRC-16 MAXIM格式校验函数 CRC-16校验产生2个字节长度的数据校验码&#xff0c;通过计算得到的校验码和获得的校验码比较&#xff0c;用于验证获得的数据的正确性。基本的CRC-16校验算法实现&#xff0c;参考&#xff1a; C语言标准CRC-16校验函数。 不同厂家通过对输入…

基于ESP32和blinker的红外小夜灯控制

一. 系统设计及框图&#xff1a; 本设计可以实现通过手机APP使用蓝牙或WIFI远程控制红外设备&#xff0c;也可以通过离线语音模块语音控制红外设备。可以控制市面上常见的NEC格式的红外设备, 这里是控制小夜灯&#xff0c;其它红外设备在控制原理上是相通的。本设计可用作课程…

如何免费使用ChatGPT 4?

自从ChatGPT发布以来&#xff0c;它就取得了巨大的成功。无论是常春藤法学考试还是商学院作业&#xff0c;ChatGPT都被用于各种试验。统计数据显示&#xff0c;ChatGPT每月吸引约9600万用户。随着ChatGPT的巨大成功&#xff0c;Open AI最近推出了它的最新版本&#xff0c;名为“…

Docker本地推送到hub,以及上传时遇到的问题解决

1.在本地创建一个 Dockerfile FROM ubuntu:latest RUN apt-get update && apt-get install -y curl CMD ["curl", "https://www.baidu.com"]2.在本地构建 Docker 镜像 在创建本地docker镜像的时候[TAG] .和[TAG] /PATH/TO 需要注意dockerfile文件…

Rust China Conf 2023 筹备启动:议题征集开始

大会介绍Rust China Conf 2023 由 Rust 中文社区发起主办、知名企业和开源组织联合协办&#xff0c;是年度国内规模最大并唯一的 Rust 线下大型会议&#xff0c;深受 Rust 中文社区开发者与相关企业的喜爱与推崇。本次大会为线下会议&#xff0c;将于6月17日-18日在上海举办&am…

企业推广常用的网络推广方法有哪些?

网络推广是指通过互联网向目标用户推广产品、服务或品牌的过程&#xff0c;其主要目的是为了扩大业务范围&#xff0c;提高企业知名度&#xff0c;增加销售额。在当今的数字化时代&#xff0c;网络推广已经成为了企业不可或缺的一部分。本文将介绍一些常见的网络推广方法和途径…

yolov5详解与改进

https://github.com/z1069614715/objectdetection_script YOLOV5改进-Optimal Transport Assignment Optimal Transport Assignment&#xff08;OTA&#xff09;是YOLOv5中的一个改进&#xff0c;它是一种更优的目标检测框架&#xff0c;可以在保证检测精度的同时&#xff0c…