useMemo を「とりあえず使っていた頃」から理解していった記録

useMemo を「とりあえず使っていた頃」から理解していった記録

React を触っていると、いつの間にか useMemo を“なんとなく”使っていることがありました。重い処理を避けるためのフック、という説明は目にするものの、本当に必要な場面がどれくらいあるのか、自分の中では曖昧なまま使っていたと思います。

そこで今回は、useMemo の挙動をあらためて確認しながら「どんなときに使うべきなのか」を整理していった記録をまとめています。

■ 1. まずは useMemo を外してみた

最初に試したのは、普段 useMemo をつけていた部分をいったん外してみることでした。


const value = heavyCalc(count);

こうして再レンダリングのログを確認すると、count が変わるたびに heavyCalc が再実行されているのが分かりました。軽い処理なら問題ありませんが、実際に時間がかかる関数に変えると、レンダリングのたびに遅さが目立ちます。

「毎回実行しなくてよい処理は、確かにメモ化したほうがよい」 ここでようやく useMemo の必要性が見えてきました。

■ 2. useMemo をつけたらどう変わるのか確認した


const value = useMemo(() => {
  return heavyCalc(count);
}, [count]);

useMemo を追加して動かしてみると、count が変わらない限り heavyCalc が実行されていないことがログで確認できました。依存している値が変わらない限り“前回の結果を再利用する”という動きが、実際に触ってみてようやく理解できた部分です。

また、依存配列を空にすると、初回だけ heavyCalc が実行される挙動も確認できました。

【Tips】useMemo は「毎回実行される必要のない計算」を避けるためのフック

  • 依存が変わらなければ計算をスキップする
  • “重い処理” ほど効果が分かりやすい
  • 軽い処理に使うと逆にわかりにくくなることもある

“とりあえず使う” のではなく「この計算は本当に毎回必要か?」という視点のほうがしっくりきました。

■ 3. 逆に「useMemo が不要だった例」も確認しておく

試していて気づいたのは、処理が軽い場合は useMemo の効果がほとんど分からない、という点です。むしろコードの見通しが悪くなるだけで、パフォーマンス的なメリットはありませんでした。

この経験から、useMemo を使うのは以下のようなケースに限るほうが自然だと感じました。

  • 重い計算処理をしている
  • 大きな配列からフィルタやソートをしている
  • 再レンダリングが多く、処理負荷が気になる

“useMemo を使わないほうがよいケース” を把握することで、適切な使いどころが少しずつ見えてきました。

■ まとめ:useMemo は「必要な場面だけ使う」が一番しっくりくる

useMemo は、使い始めの頃はつい何となく付けてしまいがちでしたが、実際に動かしてみると用途はとても限定的でした。

  • 重い処理を毎回実行したくないときに使う
  • 依存が変わらない限り計算を再実行しない
  • 軽い処理なら無理に使う必要はない

必要な場面が分かると、無理に使わず自然に判断できるようになり、React のパフォーマンスの考え方が少し整理されました。

コメント

タイトルとURLをコピーしました