游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

React性能调试好帮手useWhyDidYouUpdate

  大家好,我是前端西瓜哥。
  最近在尝试优化React组件,使用了React。memo()去缓存组件的渲染结果。
  但有一个问题,就是要使React。memo()的缓存生效,需要保持props对象的浅比较结果为true。
  所以我们需要通过useCallback或useMemo处理一些对象类型的prop,让它们保持指向原来的内存对象。
  在props少的时候还好,但一旦多了之后,我们就比较难通过肉眼确认是哪个prop导致缓存失效。
  怎样才能够方便地知道props的哪个属性发生了改变呢?
  你可以试试useWhyDidYouUpate。useWhyDidYouUpate
  useWhyDidYouUpate是一个第三方ReactHooks,来自优秀的ahooks库。
  名字很直白:Whydidyouupdate,意思就是你(组件)为什么更新了?。
  顾名思义,useWhyDidYouUpate的作用是帮助开发者排查是哪个属性改变导致了函数组件重渲染。
  用法很简单,传入一个标识符字符串(通常为组件名)、以及要进行对比的对象(通常为props)。useWhyDidYouUpdate(Counter,props);
  useWhyDidYouUpdate会保存好上一次传入的props,然后和新传入的props进行比较,找出不同的属性,将它们打印到控制台。
  我们来看个示例:import{useWhyDidYouUpdate}fromahooks;import{useState}fromreact;functionCounter(props){useWhyDidYouUpdate(Counter,props);return({props。title}{props。count});}exportdefaultfunctionApp(){const〔count,setCount〕useState(0);return(buttononClick{()setCount(count1)}1buttonCountertitle{计数显示}count{count});}
  点击1按钮,然后就会在控制台看到下面输出:
  这样我们就可以知道,是因为count从原来的0,变成了现在的1,导致了Counter组件的更新。
  在线demo:
  https:codesandbox。iosu279ov?filesrcApp。js实现
  useWhyDidYouUpdate的实现不是很复杂,我们直接贴源码(去掉TS类型标注)分析一下。functionuseWhyDidYouUpdate(componentName,props){constprevPropsuseRef({});useEffect((){if(prevProps。current){提取新旧props的属性,生成数组constallKeysObject。keys({。。。prevProps。current,。。。props});constchangedProps{};allKeys。forEach((key){对比新旧prop〔key〕,如果不同,记录到对象中if(!Object。is(prevProps。current〔key〕,props〔key〕)){changedProps〔key〕{from:prevProps。current〔key〕,to:props〔key〕,};}});if(Object。keys(changedProps)。length){输出到控制台console。log(〔whydidyouupdate〕,componentName,changedProps);}}更新prevPropsprevProps。currentprops;});}
  首先用useRef来声明一个prevProps变量,用来保存上一次的props。
  函数组件中,ref可以实现类组件的实例属性的效果,确保每次渲染时可以保持原来的值。
  然后将新旧props对象的属性提取出来,生成一个属性数组allKeys。
  遍历这个数组,去对比新旧prop〔key〕。如果不同,记录到changedProps对象中。
  最后输出改变的内容,并更新prevProps。结尾
  当你尝试通过React。memo()给组件添加缓存时,却发现没能按照预期触发缓存,想要看看是哪个props发生了变化。
  那么,你可以用useWhyDidYouUpdate来检查到底是哪些prop发生了改变。
  当然不仅限于props,我们也可以用state或其他对象上。
  我是前端西瓜哥,欢迎关注我,学习更多前端知识。

不只是耳机,还是个潮酷穿搭配饰,英雄运动蓝牙耳机HEROS1在之前的文章中就有说过,现在的耳机的发展方向呈现百花齐放的姿态,对于领域细分也比较明显,说了那么多的骨传导耳机和真无线蓝牙耳机,今天我们来换换样,说一下挂脖式耳机,本次选取的耳……明日出伏祛湿热的时节到了,记得做好这4件事,补好你的肠胃明日出伏,秋逐残夏,今年最热的时光也算是熬出头了。这段时间有余热,有秋凉,有秋燥,还有湿热,是一年中最多变的时光。身体体表的阳气也开始向内收敛,是气血变革、重新调整……代码证据表明小米POCOF2可能为印度版RedmiK30PrIT之家3月26日消息据XDA报道,他们在MIUI11相机应用代码中,发现部分代码指向即将发布的POCOF2可能就是印度版RedmiK30Pro。有开发者反编译了MIUI……华为钱包深圳通本地卡众测招募开启感谢IT之家网友猪翅膀的线索投递!IT之家4月18日消息据IT之家网友反馈,华为钱包现已开启深圳通本地卡众测招募活动。IT之家了解到,此次活动招募时间为从今天至4月……白菜丸子冬天家里最多的就是大白菜了,今天给孩子们换个做法。1。把白菜洗净剁碎,放盐杀水,攥干水分。2。小葱洗净切沫。3。白菜馅加葱末,盐,十三香,搅拌均匀,最后打入两……一加全新无线耳机泄露4种配色,非TWSIT之家4月1日消息一加将于本月晚些时候推出一些新产品,包括一加8系列手机。据外媒爆料,一加可能在一加8系列发布会上带来全新的OnePlusBulletsWirelessZ无线……线下海报曝光OPPOAce2小杯价格4399元,全系标配UFIT之家4月9日消息OPPO此前正式官宣新款OPPOAce2手机,今日微博博主i冰宇宙曝光了OPPOAce2手机的线下预售海报,同时这款新机的相关配置信息也已被曝光。从海……OPPOAce2官宣支持65W超级闪充,无线快充成谜IT之家4月9日消息今日上午OPPO官方宣布新款OPPOAce2支持SuperVOOC2。065W全场景超级闪充,不过对于其无线充电配置则留有悬念。IT之家此前报道,OP……散文日子是过给自己的,要懂得与自己和解,让日子翻篇作者:子墨当我们走过熙熙攘攘的人群,走过安静的街道,你会发觉,每个人都活得很幸福的样子,世间的一切都是美好的样子。或许,看得多了就会发觉,这是一种表面的快乐,只是我……与国际大牌卖一样贵,国货香水哪来的底气?记者周芳颖编辑楼婍沁在美妆市场的寒冬之下,国货香水品牌的发展态势却颇有逆流而上的味道。仅在11月,就有观夏ToSummer在杭州天目里开设新店西溪客厅这是其进……微信Android版7。0。20内测版发布新增聊天不显示选项感谢IT之家网友豆豆的线索投递!IT之家10月21日消息今日,微信Android版迎来7。0。20内测版更新。微信Android版7。0。20内测版支持在设置中开启……王文中柬齐心拥抱美好未来位于中南半岛的柬埔寨是古代海上丝绸之路的重要一站,也是打造21世纪海上丝绸之路的重要支点。近年来,经过双方共同努力,柬埔寨为推动一带一路在东南亚乃至更广泛区域内的建设起到良好示……
小米8透明探索版下架,小米9透明尊享版上位感谢IT之家网友InfinityWei的线索投递!IT之家3月20日消息据众多网友反馈,IT之家发现小米商城官方网站已经下架了小米8透明探索版手机,该机搭载半透明的后壳,……小米8更新MIUI9。3。28开发版新增深色模式感谢IT之家网友软媒用户1514253的线索投递!IT之家3月29日消息小米8今天在今天中午更新了MIUI9。3。28开发版,除了修复一些Bug外,还带来了大家期盼已久的……MIUI深色模式再增机型红米Note5领先旗舰尝鲜感谢IT之家网友G港货柜老板的线索投递!IT之家3月28日消息昨日,小米MIX3手机在升级至最新版本内测版系统之后,系统设置选项新增深色模式。今日,据IT之家读者反馈,这……MIUI深色模式上线小米MIX3尝鲜,截图感受下感谢IT之家网友孟孟的安安的线索投递!IT之家3月27日消息3月22日晚间,小米互联网一部总经理李伟星在微博上贴出了小米9新功能适配至其他机型的时间的内部计划表,游戏加速……葛天24岁嫁偶像刘翔,结婚不到1年就离婚,如今过得如何了说起演员葛天,人们或许会觉得有些陌生。可说起刘翔,说起她是刘翔的前妻,那不少人多少就有些印象了。不过比起结婚,离婚的消息还是更让人震惊。在他们婚后不到一年的时……小米MIUI后续将加入息屏显示电量功能IT之家3月11日消息今日晚间,MIUI官方发文称,MIUI后续更新将加入息屏显示电量功能。目前,小米官方已经为小米9SE、小米8屏幕指纹版探索版推送了MIUI开发版更新……如果你觉得生活压力太大,不如回老家陪陪爸妈,适当给自己放个假成年人的世界没有容易两个字,如果你觉得很容易的话,那么就是不思进取在走下坡路,要么就是属于那种一出生就站在金字塔顶端的那类人,如果两者都不是,那上坡路走起来肯定没有那么轻松,更……备货不足小米9SE透明尊享版明日取消开售IT之家3月14日消息今日晚间,小米商城官方发布公告称,因为备货不足的原因,小米决定取消原定于明天上午小米9SE和小米9透明尊享版的开售。小米称,他们将加紧生产,在尽最大努力进……小米9耐用性测试镜头的蓝宝石玻璃究竟怎样?IT之家3月14日消息小米于今年2月20日发布了旗下最新的小米9系列机型,普通版的全系幻彩机身设计以及尊享版采用的透明机身设计,让该系列机型在外观设计上非常有个性。此外,为了保……林斌直指小米9手机缺货本质内部流程和管理缺乏经验造成IT之家3月9日消息今天小米总裁林斌在微博上表示,小米还有很多地方做得不好,包括现在大家吐槽比较多的缺货,本质上还是小米在内部的流程和管理上缺乏经验造成的。所以年前启动了周末内……屏占比的突飞猛进三星GalaxyS10屏幕保护膜几乎完全适合IT之家12月27日消息还记得GalaxyNote7吗?三星的旗舰智能手机中最后一款带有传统Home键和宽额头下巴的手机,但它遇到了电池爆炸事件。三星后来设计了GalaxyS8……我这辈子都不会原谅自己!爸爸举高高,失手将1岁儿子摔致颅脑损一抛一接逗得宝宝开心大笑举高高是不少人都喜欢和宝宝玩的互动游戏可最近,河南商丘的董先生多希望自己从未和孩子玩过这个游戏董先生夫妻俩有3个可爱……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网