React useMemo — 高コスト計算のキャッシュと安定した参照
ReactのuseMemoを使って高コストな計算をキャッシュする方法を学びます。フィルタリング、ソート、派生状態、参照等価性、メモ化のトレードオフを網羅。
Performance Hooks
詳細な説明
useMemoによる計算のキャッシュ
useMemoは再レンダリング間で計算結果をキャッシュし、依存関係が変更されたときのみ再計算します。
基本的な使い方
const sortedItems = useMemo(() => {
return [...items].sort((a, b) => a.name.localeCompare(b.name));
}, [items]);
useMemoが役立つとき
- 高コストな計算:数千のアイテムのフィルタリング/ソート、複雑な数学計算
- 参照の安定化:参照等価性をチェックする子コンポーネントの再レンダリングを防止
- 派生状態:propsや状態から値を計算し、独自のuseStateが不要な場合
useMemoを使うべきでないとき
- 些細な計算(文字列連結、単純な算術)
- 依存関係が毎レンダリングで変更される場合(キャッシュが無効になる)
- セマンティックな保証として -- Reactはメモリ圧迫時にキャッシュされた値を破棄する場合がある
まずプロファイリング
useMemoを追加する前に、React DevToolsプロファイラーを使用して、計算が実際にボトルネックであることを確認してください。不要なメモ化は複雑さとメモリオーバーヘッドを追加します。
ユースケース
大規模データセットのフィルタリングとソート、propsからの派生状態の計算、メモ化された子コンポーネントのためのオブジェクトと配列の参照の安定化、レンダリングパフォーマンスに測定可能な影響を与える計算にuseMemoを使用します。