Vue 定义只读数据 readonly 与 shallowReadonly

本文主要是介绍Vue 定义只读数据 readonly 与 shallowReadonly,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

readonly 让一个响应式数据变为 **深层次的只读数据**。

shallowReadonly 让一个响应式数据变为 **浅层次的只读数据**,只读第一层。

isReadonly 判断一个数据是不是只读数据。

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


readonly深层次只读:

<template><h1>reactive数据</h1><p>姓名:{{ info.name }}</p><p>年龄:{{ info.age }}</p><button @click="editInfo">修改reactive数据</button><hr /><h1>readonly数据</h1><p>姓名:{{ readInfo.name }}</p><p>年龄:{{ readInfo.age }}</p><button @click="editReadInfo">修改readonly数据</button>
</template><script>
// 引入 readonly 与 reactive 函数
import { readonly, reactive } from 'vue'
export default {name: "Home",setup() {// 使用 reactive 创建数据const info = reactive({name: "张三",age: 20});// 使用 readonly 创建只读数据const readInfo = readonly(info);// 修改 reactive 数据const editInfo = () => {info.name = "李四";info.age = 22;console.log(info);console.log(readInfo);}// 修改 readonly 数据(警告,不会被修改)const editReadInfo = () => {readInfo.name = "李四";readInfo.age = 22;console.log(info);console.log(readInfo);}// 返回数据return {info,readInfo,editInfo,editReadInfo}}
}
</script>

:修改原数据时,只读的数据也会发生改变。

:修改只读的数据时,会触发警告提示数据不允许被修改。 

:readonly 返回的数据是不允许被修改的,但是可以修改原来的数据。并且原来的数据发生改变时,readonly 返回的数据也会发生改变。 

 shallowReadonly 浅层次只读:

<template><h1>readonly数据</h1><p>姓名:{{ readInfo.name }}</p><p>商品名称:{{ readInfo.shop.title }}</p><p>商品价格:{{ readInfo.shop.price }}</p><button @click="editReadInfo">修改readonly数据</button><hr /><h1>shallowReadonly数据</h1><p>姓名:{{ shallowInfo.name }}</p><p>商品名称:{{ shallowInfo.shop.title }}</p><p>商品价格:{{ shallowInfo.shop.price }}</p><button @click="editShallowInfo">修改shallowReadonly数据</button><hr />
</template><script>
// 引入 readonly、shallowReadonly、reactive 函数
import { readonly, shallowReadonly, reactive } from 'vue'
export default {name: "Home",setup() {// 使用 reactive 创建数据const readData = reactive({name: "张三",shop: {title: "灰太狼",price: 999}})// 使用 readonly 定义深层次的只读数据const readInfo = readonly(readData);// 使用 reactive 创建数据const shallowData = reactive({name: "李四",shop: {title: "喜洋洋",price: 666}})// 使用 shallowReadonly 定义浅层次的只读数据const shallowInfo = shallowReadonly(shallowData);// 修改 readonly 数据const editReadInfo = () => {readInfo.name = "张三丰";readInfo.shop.title = "红太狼";readInfo.shop.price = "199";console.log(readInfo);}// 修改 shallowReadonly 数据const editShallowInfo = () => {shallowInfo.name = "李四民";shallowInfo.shop.title = "懒洋洋";shallowInfo.shop.price = "166";console.log(shallowInfo);}// 返回数据return {readInfo,shallowInfo,editReadInfo,editShallowInfo,}}
}
</script>

当修改 readonly 数据时,不论多少层,都不允许被修改。

当修改 shallowReadonly 数据时,只有第一层不允许被修改,第二层及以后的数据是可以被修改的。 

原创作者:吴小糖

创作时间:2023.11.28

这篇关于Vue 定义只读数据 readonly 与 shallowReadonly的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/431625

相关文章

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

MySQL数据脱敏的实现方法

《MySQL数据脱敏的实现方法》本文主要介绍了MySQL数据脱敏的实现方法,包括字符替换、加密等方法,通过工具类和数据库服务整合,确保敏感信息在查询结果中被掩码处理,感兴趣的可以了解一下... 目录一. 数据脱敏的方法二. 字符替换脱敏1. 创建数据脱敏工具类三. 整合到数据库操作1. 创建服务类进行数据库

MySQL中处理数据的并发一致性的实现示例

《MySQL中处理数据的并发一致性的实现示例》在MySQL中处理数据的并发一致性是确保多个用户或应用程序同时访问和修改数据库时,不会导致数据冲突、数据丢失或数据不一致,MySQL通过事务和锁机制来管理... 目录一、事务(Transactions)1. 事务控制语句二、锁(Locks)1. 锁类型2. 锁粒

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http