できない.dev

useMemo

別名: useMemo フック / メモ化フック

依存配列が変化したときだけ高コストな計算を再実行し、結果をキャッシュして再レンダリングを最適化する React フック。

#react#hooks#usememo#memoization

公開:

定義

useMemo は、計算結果をメモ化(キャッシュ)する React フックです。const value = useMemo(() => compute(a, b), [a, b]) のように、依存配列が変わったときだけ第 1 引数の関数を再実行します。

詳細

再レンダリングのたびに走る重い計算や、毎回新しく作られるオブジェクト・配列を安定させたいときに使います。

後者は、子コンポーネントや useEffect の依存配列へ「同じ参照」を渡し、ムダな再実行を防ぐ目的でよく使われます。
メモ化自体にもコストがあるため、明確なボトルネックがある箇所に絞るのが原則です。

よくある誤解

  • 「付ければ必ず速くなる」:比較と保持のコストがあり、軽い計算ではかえって遅くなることがあります。
  • useEffect の代わりになる」:副作用の実行用ではなく、あくまで値の計算とキャッシュ用です。

関連

メモ化が効かない原因は useMemo がメモ化されず毎回再計算される、副作用フックは useEffect を参照。