最新版vue3+TypeScript开发入门到实战教程之重要详解readonly/shallowReadOnly

readonly api详解

用于创建一个对象的深只读副本。含义有两层,一是创建的副本对象是只读的。二是副本对象是深层次只读。

用一个实例说明什么事深层次只读。

Fish组件代码

复制代码
<template>
  <div class="fish">
    <h5>{{fishs1}}</h5>
    <h5 >{{fishs2}}</h5>
    <button @click="changeFish()">改变鱼1</button>
  </div>
</template>
<script setup lang="ts">
import { reactive, readonly } from 'vue';
let fishs1 = reactive(
  {
    name: '鲫鱼',
    body: {
      pirce: 10,
    }
  });
let fishs2 = readonly(fishs1);
function changeFish() {
  fishs1.name += '~'
  fishs1.body.pirce += 10;
  // 不可修改
  fishs2.name += '~'
  // 不可修改
  fishs2.body.pirce += 10;
  }
</script>

运行如下图:

fishs2.name += '~' 与fishs2.body.pirce += 10;修改不成功,提示警告信息,其中fishs2.body.pirce += 10;属于深层次不可修改

shallowReadOnly api详解

shallowReadOnly 浅层次只读,与ReadOnly深层次相对应。它只是第一层数据不可修改,第二层以后都可修改。

Fish组件代码

复制代码
<template>
  <div class="fish">
    <h5>{{fishs1}}</h5>
    <h5 >{{fishs2}}</h5>
    <button @click="changeFish()">改变鱼1</button>
  </div>
</template>
<script setup lang="ts">
import { reactive, shallowReadonly } from 'vue';
let fishs1 = reactive(
  {
    name: '鲫鱼',
    body: {
      pirce: 10,
    }
  });
let fishs2 = shallowReadonly(fishs1);
function changeFish() {
  fishs1.name += '~'
  fishs1.body.pirce += 10;
  fishs2.name += '~'
  fishs2.body.pirce += 10;
  }
</script>

运行效果如图,fishs2.body.pirce += 10;价格可以修改。

相关推荐
星恒随风31 分钟前
四天学完前端基础三件套(JavaScript篇)
开发语言·前端·javascript·笔记
guslegend40 分钟前
第9节:前端工程与一键启动
前端·大模型·状态模式·ai编程
杜子不疼.1 小时前
【 C++ AI 大模型接入 SDK】 - 日志模块
开发语言·javascript·c++
南囝coding1 小时前
Anthropic 内部数百个 Claude Code Skills,他们总结的这套方法值得看
前端·后端
Dxy12393102162 小时前
如何使用jQuery获取一类元素并遍历它们
前端·javascript·jquery
csdn小瓯2 小时前
AI质量评估体系:LLM-as-a-Judge实现与自动化测试实战
前端·网络·人工智能
jiayong232 小时前
第 43 课:任务详情抽屉里的批量处理闭环与删除联动
java·开发语言·前端
likerhood2 小时前
Java 访问修饰符:public、protected、private讲解
java·开发语言·javascript
刀法如飞2 小时前
JavaScript 数组去重的 20 种实现方式,学会用不同思路解决问题
前端·javascript·算法
小江的记录本2 小时前
【AI大模型选型指南】《2026年5月(最新版)国内外主流AI大模型选型指南》(个人版)
前端·人工智能·后端·ai·aigc·ai编程·ai写作