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

相关推荐
roamingcode4 小时前
前端 AI Agent 多智能体协作架构:从对抗式排查到工作流解耦
前端·人工智能·架构·agent·team
蓝莓味的口香糖5 小时前
【vue】初始化 Vue 项目
前端·javascript·vue.js
aikongmeng5 小时前
【Ai】Claude Code 初始化引导
javascript
光影少年6 小时前
数组去重方法
开发语言·前端·javascript
我命由我123456 小时前
浏览器的 JS 模块化支持观察记录
开发语言·前端·javascript·css·html·ecmascript·html5
weixin_443478516 小时前
Flutter第三方常用组件包之路由管理
前端·javascript·flutter
武藤一雄6 小时前
C# 异步回调与等待机制
前端·microsoft·设计模式·微软·c#·.netcore
啥都不懂的小小白7 小时前
前端CSS入门详解
前端·css
林恒smileZAZ7 小时前
前端大屏适配方案:rem、vw/vh、scale 到底选哪个?
开发语言·前端·css·css3