听说Vue3响应式原理变成了Proxy

12 篇文章 1 订阅

事情是这样的,最近要code review,本来想把之前那个表单校验任务优化一下。

失焦校验真SB,尝试使用ES6的Proxy来做校验。_董厂长的博客-CSDN博客背景:这两天准备优化表单代码,公司规定的是失焦校验。问题描述:表单里有个input框,只能输入数字。使用Ant desgin的表单前缀加了一个“PT”,此时的PT是一个icon。并不是字符串。传入数据库的时候,需要拼接字符串加上“PT”(这个是字符串)。关闭模态窗口表单重新校验了,而且校验的是最新值,如“PT1234” 。项目统一失焦校验,导致了交互方面出问题,视图层会优先改变。举例, “1234”,点击保存变成会拼接前缀变成“PT1234”并且传入数据库。这时候视图层也会变成“PT1234https://blog.csdn.net/dongnihao/article/details/122845237?spm=1001.2014.3001.5502然后又回去看了看ES6的Proxy。在网上查阅资料时候发现,Vue3响应式原理使用了Proxy。

理解:Proxy相当于拦截层,你对原对象的所有操作都会被拦截做处理。那么Vue3的响应式就是如此,每次更改,都会出发set()操作。举个例子比如下面的代码,我只要改变obj对象中 a属性的值,那么就会变成你输入值的三倍。

let obj ={
    a:1,
    b:2,
  };
  
  function reactive(obj){
    let proxy =new Proxy(obj,{
      get(target,propKey,recever){
        return target[propKey]
      } ,
      set(target,propKey,value,recever){
        target[propKey] = value*3;
      },
    }
    )
    return proxy;
  }

    let goproxy = reactive(obj);
    goproxy.a = 3;
    console.log(goproxy.a);

简单说明一下:

明天继续看。。。 

VUE中怎么收集的呢?调用时候,在get()中push到数组就是收集。不上代码的话属实抽象。。。。

let obj ={
    a:1,
    b:2,
  };
  
  let subscribe=[];

  function reactive(obj){
    let proxy =new Proxy(obj,{
      get(target,propKey,recever){
        return target[propKey]
      } ,
      set(target,propKey,value,recever){
        target[propKey] = value*3;
        subscribe.forEach(fn=>fn());
      },
    }
    )
    return proxy;
  }

    let goproxy = reactive(obj);

    function effect(fn){
      subscribe.push(fn);
    }

    effect(()=>{
      console.log(goproxy.a);
    }
    )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董厂长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值