readonly & shallowReadonly
-
readonly: 让一个响应式数据变为只读的(深只读)。
-
shallowReadonly:让一个响应式数据变为只读的(浅只读)。
-
应用场景: 不希望数据被修改时。
eg
<template>
<h4>当前求和为:{{ sum }}</h4>
<button @click="sum++">点我 ++</button>
<hr />
<h2>姓名: {{ name }}</h2>
<h2>年龄: {{ age }}</h2>
<h2>薪资: {{ job.j1.salary }} k</h2>
<button @click="name += '~'">修改姓名</button>
<button @click="age++">修改年龄</button>
<button @click="job.j1.salary++">修改薪资</button>
</template>
<script>
import { reactive, toRefs, ref, readonly, shallowReadonly } from "vue";
export default {
name: "Demo",
setup() {
let sum = ref(0);
let person = reactive({
name: "张三",
age: 18,
job: {
j1: {
salary: 20,
},
},
});
// readonly : 让一个响应式数据变为只读的(深只读)。
// readonly, 接收响应式数据; 返回一个新的数据,返回的数据有一个特点就整个对象是只读的, 不允许更改!
person = readonly(person)
// shallowReadonly: 让一个响应式数据变为只读的(浅只读)
person = shallowReadonly(person);
// 限制 ref 生成响应式数据进行限制
sum = readonly(sum)
sum = shallowReadonly(sum)
return {
sum,
...toRefs(person),
};
},
};
</script>