最新版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;价格可以修改。

相关推荐
东风破_3 小时前
danci 项目(三):从 JSON 数据到 AI Coding,真实项目里的数据清洗、Prompt 和工程规范
前端·后端·node.js
东风破_4 小时前
danci 项目(一):从需求到架构,一个单词学习系统为什么会这样设计
前端·后端·node.js
蒲公英eric4 小时前
从客户端到服务端:DVWA DOM 型 XSS 模块完整漏洞分析教程
前端·web安全·ai·xss·dvwa·ai安全
单线程_014 小时前
从案例分析 Vue3 Tokenizer+Parser 源码三
前端·javascript·vue.js
小磊哥er5 小时前
深入解构Claude Code - 第 10 篇 · 高级能力
typescript·ai编程
顶点多余5 小时前
那些在算法中适合巩固的知识点---1
java·前端·算法
Setsuna_F_Seiei5 小时前
前端转型 Agent 开发 03 之 Agent Tools - 给 Agent 装上手脚
前端·agent·ai编程
jay神5 小时前
【计算机毕业设计】基于SpringBoot的程序教学辅助系统
java·前端·vue.js·spring boot·后端·毕业设计·课程设计
小磊哥er5 小时前
深入解构Claude Code - 第 9 篇 · 怎么给它加功能
typescript·ai编程
小磊哥er6 小时前
深入解构Claude Code - 第 8 篇 · 数据放哪、钱怎么算
javascript·ai编程