はじめに
今回はuseMemoの使い方を説明します。useMemoは特定の結果をキャッシュに保存することで、不要な再計算を防止することができます。本記事ではuseMemoの基本的な使い方を解説します。
以前の投稿はこちら
useMemoとは
上記で説明した通り、useMemoは特定の計算結果をキャッシュに保存することができます。それによって、同じ計算が何度も行われることを防止し、パフォーマンスの向上を図ることができます。
const memoValue = useMemo(() => {
getResultValue(a, b);
}, [a, b]);
このように第一引数には計算処理を行う関数、第二引数には依存する値の配列を指定します。第二引数の値が変化した場合のみ第一引数の処理が行われます。
useMemoの使い方
useM絵もは以下のような場合に使用することができます。
- コンポーネントの再レンダリングを防止する
コンポーネントが再レンダリングされた場合、そのコンポーネト内のすべての処理が実行されます。しかし、一部の処理は再計算する必要がない場合もあります。そのような場合にuseMemoを使用して計算結果をキャッシュすることができます。
const MyComponent = ({a, b}) => {
const memoValue = useMemo(() => {
getResultValue(a, b);
}, [a, b]);
return <div>{memoValue}</div>
};
- リストの再描画を最適化する
リストを描画する場合、リスト内の要素が変更された場合に全ての要素を再描画する必要があります。しかし、一部の要素は変更されない場合もあります。そのような場合にuseMemoを使用して、要素の描画を最適化することができます。
const MyList = ({ items }) => {
return (
<ui>
{items.map((item) => (
<MyListItem key={item.id} item={item} />
))}
</ui>
);
};
const MyListItem = ({ item }) => {
const memoValue = useMemo(() => getResultValue(item), [item]);
return <li>{memoValue}</li>;
};
このように、MyListItemコンポーネント内で計算処理を行い、計算結果をキャッシュすることで、MyListコンポーネント内の要素の再描画を最適化することができます。
useMemoを使う時の注意点
useMemoを使用する場合は以下のことに気をつけましょう。
- 計算が高コストでない場合は使用しない方がいい
useMemoを使用することでパフォーマンスが向上する場合、計算が高コストである場合に限ります。計算が高コストでない場合は、useMemoを使用することでパフォーマンスを損なうことがあります。
- レンダリングの頻度が少ない場合は使用しない方がいい
useMemoを使用することで、計算結果をキャッシュすることができますが、レンダリングの頻度が少ない場合は使用しないことをおすすめします。レンダリングの頻度が少ない場合は、キャッシュすることでパフォーマンスが向上する可能性が低いためです。
- 依存する値が多い場合は扱いに注意する
useMemoを使用する場合、依存する値が多い場合は注意が必要です。依存する値が多い場合、再計算が頻繁に行われる可能性があるためです。必要な値のみを依存するようにすることで、再計算を抑制することができます。
終わりに
以上がuseMemoの基本的な使い方でした。useMemoを適切に使うことでパフォーマンスの向上につながります。ぜひ使ってみてください。
コメント