Vue3: readonly与shallowreadonl

目录

一.readonly

1.性质

2.作用

二.shallowReadonly

1.性质

2.作用

三.readonly

四.shallowReadonly

五.运行代码


Vue3中的readonlyshallowReadonly是两个用于创建只读响应式对象的函数。

一.readonly

1.性质

readonly函数会将一个对象或数组包装成一个完全只读的响应式代理对象。这意味着不仅对象的第一层属性无法修改,其所有嵌套层级的属性也同样无法被修改。

2.作用

通过使用readonly,可以确保数据不会被意外修改,这对于需要展示但不能修改的数据非常有用。例如,在投票结果展示中,可以通过readonly来防止用户无意中修改投票数。

二.shallowReadonly

1.性质

shallowReadonly函数创建一个只读的浅层响应式代理对象,它只会对对象的第一层属性进行只读处理,而不会递归处理嵌套的属性。

2.作用

使用shallowReadonly可以在确保顶层数据不可变的同时,允许修改嵌套对象的属性。这在某些场景下可能很有用,比如某个特定层级以下的数据是可变的。

三.readonly

所有属性均无法修改(所有属性均为只读)

四.shallowReadonly

无法修改sum3与Name3.name(顶层属性被设置为只读)

可以修改更深一层的Name3.options.mom(因为只有顶层属性被设置为只读)

五.运行代码

复制代码
<template>
    
  <h2>求和为:{{ sum1 }}</h2>
  <h2>名字为: {{ person.name }}</h2>
  <h2>年龄为:{{ person.age }}</h2>

  <button @click="ChangeSum">求和加一</button>
  <button @click="ChangeName">修改名字</button>
  <span></span>
</template>

<script lang="ts" setup name="App">
import { ref , reactive,readonly, shallowReadonly } from 'vue';

  let sum1 = ref(0)
  let person = reactive({
    name:'小明',
    age:18,
    options:{
      mom:'小张'
    }
  })

  let sum2 = readonly(sum1)
  let Name2 = readonly(person)

  let sum3 = shallowReadonly(sum1)
  let Name3 = shallowReadonly(person)

  function ChangeSum(){
    sum2.value += 1
  }

  function ChangeName(){
    Name2.name = '小红'
  }


  function ChangeSum3(){
    sum3.value += 1
  }

  function ChangeName3(){
    Name3.name = '小红'
  }

  function ChangeMom3(){
    Name3.options.mom = '小蓝'
  }

</script>
  
<style>
button{
  width: 150;
  height: 40;
}
  
</style>
相关推荐
忧郁的蛋~14 小时前
.NET异步编程中内存泄漏的终极解决方案
开发语言·前端·javascript·.net
2301_7951672014 小时前
玩转Rust高级应用. ToOwned trait 提供的是一种更“泛化”的Clone 的功能,Clone一般是从&T类型变量创造一个新的T类型变量
开发语言·后端·rust
水月wwww14 小时前
vue学习之组件与标签
前端·javascript·vue.js·学习·vue
你才是向阳花14 小时前
如何用Python实现飞机大战小游戏
开发语言·python·pygame
合作小小程序员小小店15 小时前
web网页开发,在线%商城,电商,商品购买%系统demo,基于vscode,apache,html,css,jquery,php,mysql数据库
开发语言·前端·数据库·mysql·html·php·电商
顾安r15 小时前
11.8 脚本网页 塔防游戏
服务器·前端·javascript·游戏·html
草莓熊Lotso15 小时前
C++ 方向 Web 自动化测试实战:以博客系统为例,从用例到报告全流程解析
前端·网络·c++·人工智能·后端·python·功能测试
星释15 小时前
Rust 练习册 :Phone Number与电话号码处理
开发语言·机器学习·rust
fruge15 小时前
Canvas/SVG 冷门用法:实现动态背景与简易数据可视化
前端·信息可视化
one year.15 小时前
Linux:线程同步与互斥
java·开发语言