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

相关推荐
早起傻一天~G23 分钟前
vue2+element-UI表单封装
前端·vue.js·ui
pixcarp28 分钟前
Nginx实战部署与踩坑总结 附带详细配置教程
服务器·前端·后端·nginx·golang
Live&&learn35 分钟前
Vue项目打包后内联字符串不显示的原因
前端·javascript·vue.js
爱上好庆祝38 分钟前
学习js的第三天
前端·css·人工智能·学习·计算机外设·js
aq553560038 分钟前
Chrome如何重塑Web标准的未来格局
前端·chrome
宁雨桥41 分钟前
深入剖析Vue2与Vue3响应式原理:从Object.defineProperty到Proxy的演进
前端·vue.js
wytraining44 分钟前
SDD规范驱动开发
前端
深海鱼在掘金1 小时前
Next.js从入门到实战保姆级教程(第十四章):性能优化深度实践
前端·typescript·next.js
tiger从容淡定是人生1 小时前
Selenium与Playwright:两大Web自动化框架的深入对比
前端·selenium·测试工具·自动化·web测试·playwright·信息化战略
好运的阿财1 小时前
OpenClaw工具拆解之 web_fetch+image_generate
前端·python·机器学习·ai·ai编程·openclaw·openclaw工具