vue3手写shallowReadonly浅只读

Posted web半晨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue3手写shallowReadonly浅只读相关的知识,希望对你有一定的参考价值。


1、函数实现

// 定义了一个readonlyHandler处理器
const readonlyHandler = 
  get(target, prop) 
    if (prop === '_is_readonly') return true;
    const result = Reflect.get(target, prop);
    console.log('拦截到了读取数据了', prop, result);
    return result;
  ,
  set(target, prop, value) 
    console.warn('只能读取数据,不能修改数据或者添加数据');
    return true;
  ,
  deleteProperty(target, prop) 
    console.warn('只能读取数据,不能删除数据');
    return true;
  


// 定义一个shallowReadonly函数
function shallowReadonly(target) 
  // 需要判断当前的数据是不是对象
  if (target && typeof target === 'object') 
    return new Proxy(target, readonlyHandler);
  
  return target;


2、函数调用

const proxyUser3 = shallowReadonly(
      name: '小明',
      cars: ['奔驰', '宝马']
);
// 可以读取
console.log(proxyUser3.name);
// 不能修改
proxyUser3.name = '==';
// 不能删除
delete proxyUser3.name;
// 拦截到了读取,可以修改
proxyUser3.cars[0] = '奥迪';
// 拦截到了读取,可以删除
delete proxyUser3.cars[0];

以上是关于vue3手写shallowReadonly浅只读的主要内容,如果未能解决你的问题,请参考以下文章

手写vue3源码——readonly, isReactive,isReadonly, shallowReadonly

手写vue3源码——readonly, isReactive,isReadonly, shallowReadonly

手写vue3源码——readonly, isReactive,isReadonly, shallowReadonly

shallowReadonly 与 readonly原理浅析

vue3手写isRefisReactiveisReadonlyisProxy

手写vue3源码——ref, computed 等