目录
Vue3中的readonly
和shallowReadonly
是两个用于创建只读响应式对象的函数。
一.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>