vue中proxy代理,vue3.0的proxy

  vue中proxy代理,vue3.0的proxy

  本文主要详细介绍Python学生成绩管理系统。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。

  

vue3 简易实现proxy代理

  1.原始数据

  const state=reactive({姓名: cld ,年龄:26,喜欢: paint });

  Console.log(更改年龄前获取值,state . age);

  state.age=28

  Console.log(更改年龄后获取值,state . age);

  核心逻辑反应

  导出函数反应(目标){

  //创建一个响应对象对象集映射数组对象.

  返回createReactiveObject(目标,{

  //代理反映

  get(目标,密钥,接收方){

  //您可能无法访问关键目标[key]。不管成功与否都不会给出错误,所以使用reflect。

  const res=Reflect.get(target,key,receiver);//==target[key];

  Console.log(用户值,目标,关键字);

  返回res

  },

  集合(目标、关键字、值、接收者){

  const res=Reflect.set(target,key,value,receiver);

  Console.log(用户设置,目标,密钥);//==目标[键]=值;

  返回res

  }

  });

  }

  const isObject=(obj)={返回类型of obj==object obj!=null};

  函数createrreactiveobject(target,baseHandler) {

  //如果不是对象,就不需要代理

  如果(!isObject(target)) {

  返回目标;

  }

  //target目标对象baseHandler获取/设置值处理方法,

  const observed=new Proxy(target,base handler);

  观察到的回报;

  }

  /**反射功能

  *可能无法访问关键目标[key]。如果成功,将不会报告任何错误。

  *所以用reflect。

  * Reflect.get返回值Reflect.set返回值布尔值

  **/

  const res=Reflect.get(target,key,receiver);

  //Reflect.get(target,key,receiver);相当于target[key]并返回值。

  const res=Reflect.set(target,key,value,receiver);

  //res value为true/false以指示值是否设置成功。

  代理实现效果

  vue3取值时,只取代理操作。当它不取值时,它不需要深入遍历代理。

  Vue2从一开始就是深度递归的

  当数据是数组或对象时,需要递归代理。

  get (target,key,receiver) {//代理反射

  const res=Reflect.get(target,key,receiver);//==target[key];

  if (isObject(res)) {

  返回无功(RES);

  }

  返回res

  };

  修改一个值时,可以定位它是新操作还是修改后的操作。

  集合(目标、关键字、值、接收者){

  const hasKey=hasOwn(target,key);

  const old value=target[key];//Reflect.set是操作前的历史数据。

  const res=Reflect.set(target,key,value,receiver);

  如果(!hasKey) {

  //添加新属性

  Console.log(用户添加的新值,target,key);

  } else if(值!==旧值){

  //修改操作

  Console.log(用户修改值,target,key);

  }

  返回res

  };

  数据推送时,先取arr的push属性,再取array的length属性。

  设置值时,key是索引,值被添加到索引中。

  实际上,在给索引加值后,集合会再次被触发,数组的长度也要改变。

  为了减少不必要的操作,可以判断不进行任何操作。

  

总结

  本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: