Web_Design 板


LINE

各位大大好~ 直接列我练习的范例 https://stackblitz.com/edit/react-y311mj 是这样的,这是一个可以计数的按钮,然後范例中有个Expensive的component 会传一个count进去,Expensive会根据这个count变化, 因此按下按钮会render这不意外。 而input栏位由於只会修改本身的input值,不会动到count,因此 对於Expensive而言是不需要render的,所以这边试着加入React.memo 来防止Expensive 重新render,这边都没有问题。 但是我想说因为文件上写说React.memo是shallow compare的浅比较 因此上面这个范例,我故意将count用成deep好几层的方式,想试试看 是否就会rerender无效,但意外的是,React.memo却依然正常防止了 Expensive重新render。 请问这是为什麽呢? 我传入的prop是{count:{count:0}},这不是shallow了吧 那为什麽在input栏位输入值的时候,Expensive却不会重新render? --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.105.90 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Web_Design/M.1630326096.A.18A.html
1F:推 BugofBook: 因为你使用setCount时,都是回传一个新的物件 08/30 20:29
2F:→ BugofBook: 对不起,我看错问题了... 08/30 20:39
3F:→ sevenHEAD: 这样没错阿,setValue时没有动到count阿 08/30 20:53
4F:推 AJ56: 虽然改了obj上的属性 不过传的都是同一个object地址值都一样 08/30 21:30
5F:推 AJ56: 看错了 return是不同的obj 08/30 22:05
6F:→ AJ56: input改变的时候 ,count没变所以不会重新render没错 08/30 22:05
不好意思不太懂,input改变的时候整个App会在render一次,这时候我的count的obj 不是重新产生了一次,所以虽然obj值一样,但是是产生新的地址吧? 而既然是新的地址,表示prop传入的obj跟上一个prop的obj地址不同, 不是应该就要再次render吗? ※ 编辑: heavenbetula (118.163.105.90 台湾), 08/30/2021 22:19:59
7F:→ at5lp6andy: sum宣告在fc定义域内,这会导致每次rerender时,第3 08/30 23:14
8F:→ at5lp6andy: 9行都会重新呼叫,也就是sum会先再次被宣告、定义为 08/30 23:14
9F:→ at5lp6andy: 0,再去加count 08/30 23:14
10F:推 AJ56: 因为传给子的只有count,所以value变动不影响count还是同一个 08/31 16:29
11F:推 AJ56: input变的时候,count没变,count是在按add的时候才会变 08/31 16:37
好像明白了,我一直以为count没变是object内的值没变而已, 但其实object是"址"也没变 因为input更改的时候没有执行setCount所以,count的"址"是不变的 而既然"址"不变,对於子层React.memo比对後发现"址"没有更新 因此就不会去执行render 应该是这样吧~感谢各位大大! ※ 编辑: heavenbetula (115.43.143.26 台湾), 09/01/2021 22:40:29







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP