各位大大好~
直接列我练习的范例
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?