响应性基础API
创始人
2024-05-27 01:47:59
0

一.什么是proxy和懒代理?

什么是proxy?

proxy对象是用于定义基本操作的自定义行为(如:属性查找,赋值,枚举,函数调用等等)。

什么是懒代理?

懒代理:在初始化的时候不会进行全部代理,而是在访问的时候进行代理,这样就使得cpu的压力分配到不同的阶段,就不会产生很大的开销。

二.reactive与readonly的区别是什么?又该如何进行优化的?

reactive与readonly的区别:
  • reactive一般只接受ES普通的引用数据类型,尽管它可以接受Proxy对象,但是没有意义,没有必要,

  • 但是,Readonly可以接受Proxy对象且有实际的意义,它可以获取纯对象或者Proxy或者Reflmpl,返回原始代理的只读代理。总的来说,它进行了两步操作,首先是reactive其次另生成了一个只读的Proxy

  • readonly的只读是深层的只读:访问的任何嵌套property也是只读的。

  • readonly存在的意义有2个,一个是保护数据不被修改,另一个是提升性能。

例子:


运行结果:

第二个由于用的是可读的所以值不会发生变化。

优化:

因为reactive与readonly函数代码的高度相似从而进一步的抽离他们的相同点,对其进行优化,增加代码的可读性

优化步骤:

  • 1.重构get,set操作:vue3把get放入到了一个高阶函数creatGetter中,高阶函数返回get,set也同理,我们现在来封装一下:其中get我们可以通过给定一个传参去判断是否是readonly,而readonly的set有些特殊我们先不进行修改~但是这个代码还是不够美观,继续优化

function createGetter(isReadonly = true) {return function get(target, key) {const res = Reflect.get(target, key)if (isReadonly) {track(target, key)}return res}
}function createSetter() {return function set(target, key, value, receiver) {const res = Reflect.set(target, key, value, receiver)trigger(target, key)return res}
}export const reactive = (raw) => {return new Proxy(raw,  {get: createGetter(),set: createSetter()})
}export const readonly = (raw) => {return new Proxy(raw, {get: createGetter(false),set(target, key, value, receiver) {return true},})
}
  • 2.baseHandlers: 在src目录下新建一个baseHandlers.ts文件并且把之前封装好的creatGetter,creatSetter提取到这个文件夹中

  • 3.createActiveObject函数:为了语义化vue3又把new Proxy的操作也抽离成了createActiveObject函数

  • 4.优化get和set捕获器:我们回到baseHandlers.ts文件里来,最后一步优化

  • 5.警告用户不能set操作:这还没有结束,我们的readonly还差一个触发set操作时,警告用户无法set的功能

拓展:

什么是柯里化?

函数柯里化 概念:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。

相关内容

热门资讯

天津静海有个“萨克斯村”   本报记者 韩梅 通讯员 陈泽宇  华丽震撼的《巴比伦河》,撩人心弦的《回家》,如泣如诉的《友谊地...
铁路端午假期火车票昨日开售   本报讯(记者 胡子傲)记者从国铁集团获悉,铁路端午假期运输自5月30日至6月3日,为期5天,预计...
头顶千亿负债 东方盛虹202... 转自:中国经营报本报记者 李哲 北京报道近日,东方盛虹(000301.SZ)披露的2024年财报显示...
敦促美方停止对中国科技企业和人...   新华社北京5月16日电(记者董雪 刘杨)外交部发言人林剑16日表示,美方无端对中国芯片产品和人工...
美的旗下安得智联赴港上市 仍... 转自:中国经营报本报记者 陈靖斌 广州报道日前,美的集团拟对旗下安得智联供应链科技进行拆分,并赴港上...
终于来了!阿里最新财报发布,结... 运营商财经 康钊/文5月15日晚间,阿里发布2025财年Q4及全年财报,整体来看,最新年度的业绩数...
深入做好金融“五篇大文章” 为...   本报讯(记者 祁梦竹 刘菲菲)昨天上午,市委书记尹力围绕“服务国家金融管理中心建设,推动首都金融...
多个“首次”进一步激发市场活力   中国证监会16日公布实施修订后的《上市公司重大资产重组管理办法》,在简化审核程序、创新交易工具、...
山东矿机向实控人之子定增募资 ... 本报记者 庄灵辉 卢志坤 北京报道山东矿机(002526.SZ)向其实控人之子定增募资一事迎来新进展...
沙特阿美全球董事会会议在北京C...   本报讯(记者 朱松梅 通讯员 赵雷)日前,沙特阿拉伯国家石油公司(以下简称“沙特阿美”)全球董事...
广东多城公积金利率下调 大湾... 本报记者 陈婷 赵毅 深圳报道2025年5月8日起,广州、深圳、佛山、东莞、珠海、潮州、江门等广东省...
首次公布!我国空间站内发现微生... 近日,科研人员首次公布在我国空间站发现的一个微生物新物种,并将其命名为“天宫尼尔菌(Niallia ...
前4月京津冀区域出口创历史新高   本报讯(记者 鹿杨)记者日前从北京海关获悉,今年前4个月,京津冀区域进出口总额1.43万亿元人民...
现代化首都都市圈生机勃勃 九星科技为医院定制智慧监测大屏。受访者供图22号线建设现场的指挥中心。受访者供图  本报记者 李如意...
国际原油期货结算价涨超1% 本... 转自:财联社【国际原油期货结算价涨超1% 本周累涨超2%】财联社5月17日电,国际原油期货结算价涨超...
“降息潮”席卷民营银行 本报记者 慈玉鹏 北京报道步入5月,民营银行存款降息潮持续。《中国经营报》记者不完全统计,5月以来,...
短期高息理财产品“吸金” 银行... 近日,新发银行理财产品数量增加,部分理财机构密集推出高预期收益的最短持有期产品“吸金”。从产品设计来...
长安信托追讨11.98亿元投债... 近日,天风证券(601162.SH)一则公告披露了其与长安信托之间高达11.98亿元的证券交易合同纠...
明亚保险经纪控制权易主 团队... 本报记者 陈晶晶 北京报道近日,一项人事变动激起“千层浪”。根据国家金融监管总局北京监管局行政许可批...
破解确权与估值难题 首单数据... 本报记者 蒋牧云 李晖 上海 北京报道数据资产证券化的路径已经打开。近日,深圳证券交易所(以下简称“...