readonly()函数的使用

readonly() 函数的作用是接收一个对象,其可以是普通对象,也可以是响应式对象,然后返回接收对象的只读代理对象。通俗地讲,即如果想要一个对象是只读的,就使用 readonly() 函数。

新建 readonly.vue 文件,步骤如下。

(1)使用reactive()函数创建响应式对象。 (2)使用readonly()函数把响应式对象变成只读对象。 (3)尝试修改readonly()函数返回的代理对象,代码如下。

<template>
  <div>
    <h1>readonly</h1>
  </div>
</template>

<script>
import { reactive, readonly } from 'vue';

export default {
  setup() {
    // 1.使用 reactive() 函数创建响应式代理对象
    var obj = reactive({ num: 10 });

    // 2.使用 readonly() 函数把创建的响应式代理对象变成只读对象
    var newobj = readonly(obj);

    // 3.取值
    console.log(obj.num); // 输出 10
    console.log(newobj.num); // 输出 10

    // 4.尝试修改 newobj.num 的值
    // newobj.num++; // 这行代码会报错,因为 newobj 是只读的

    // 正确的做法是修改原始对象 obj
    obj.num++; // 修改原始对象 obj.num

    console.log(obj.num); // 输出 11
    console.log(newobj.num); // 输出 11,readonly 对象会同步更新

    return {}; // setup 函数需要返回一个对象,即使是空对象
  },
};
</script>

结论:readonly() 函数返回的代理对象只能取值,如果要修改它,控制台会报警告(Set operation on key "num" failed:target is readonly)且不会生效。