TL;DR

値を参照の同一性で比べる比較。React は props やメモ化した関数の引数を、Object.is による浅い比較で比べる。

仕組み

memo で包んだコンポーネントは、どれかの props が前回の値と浅い比較で等しくなければ再レンダリングされる。React は各 props を前回の値と Object.is で比べる。Object.is(3, 3) は true だが、Object.is({}, {}) は false になる。

注意点

親が再レンダリングのたびに新しいオブジェクトや配列、関数を作ると、中身が同じでも React は変わったとみなす。これを避けるには、props を必要最小限の個別の値にするか、親の側で useMemo や useCallback を使ってメモ化する。

React.cache の引数の比較も浅い比較なので、プリミティブ値を渡すのがよい。

関連

出典