各位大大好~
直接列我練習的範例
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?