← 返回首页
Vue3基础教程(二十九)
发表时间:2021-08-12 17:02:51
readonly 与 shallowReadonly

1.readonly 深度只读数据 - 获取一个对象 (响应式或纯对象) 或 ref 并返回原始代理的只读代理。 - 只读代理是深层的:访问的任何嵌套 property 也是只读的。

2.shallowReadonly - 浅只读数据 - 创建一个代理,使其自身的 property 为只读,但不执行嵌套对象的深度只读转换

应用场景: 在某些特定情况下, 我们可能不希望对数据进行更新的操作, 那就可以包装生成一个只读代理对象来读取数据, 而不能修改或删除。

实例:

<template>
    <h2>App</h2>
    <h3>m1: {{m}}</h3>

    <button @click="update">更新</button>
</template>

<script lang="ts">
    import {reactive, ref, shallowReactive, shallowRef, readonly, shallowReadonly} from 'vue'

    export default {
        setup() {
            const m1 = reactive({name: 'zhangsan', age: 20, car: {brand: 'BMW'}})
            //深度只读
            //const m = readonly(m1);
            //浅只读
            const m = shallowReadonly(m1);
            const update = () => {
                //m.name = 'lisi'; //error,readonly;
                //m.car.brand = 'TOYOTA';
                m.car.brand = 'TOYTOTA';
            }
            return {
                m1,
                m,
                update,
            }
        }
    }
</script>