React Hooksには、コンポーネントのパフォーマンスを向上させるためのツールがあります。その中でも、useCallbackとuseMemoは、特に重要で混同されがちなフックです。この記事では、useCallbackとuseMemoの違いと使い分けについて解説します。
useCallbackとは
useCallbackは、メモ化されたコールバック関数を作成するためのフックです。これは、親コンポーネントが再レンダリングされた際に、子コンポーネントが再レンダリングされるのを避けるために使用されます。useCallbackは、以下のような場合に使用すると良いでしょう。
- レンダリングの度に新しい関数を生成する必要がある場合
- コンポーネントのプロパティとして渡される関数がある場合
useMemoとは
useMemoは、メモ化された値を作成するためのフックです。これは、計算コストの高い演算がある場合に使用されます。useMemoは、以下のような場合に使用すると良いでしょう。
- コンポーネントのレンダリングの度に計算を行う必要がある場合
- 計算の結果をキャッシュし、同じ値が再度計算されるのを防ぎたい場合
使い分け
useCallbackとuseMemoの使い分けは、以下のようになります。
- コールバック関数の生成:
useCallback - 計算結果のキャッシュ:
useMemo
つまり、以下のような場合には、useCallbackを使いましょう。
const Example = ({ onClick }) => {
return <button onClick={onClick}>Click me</button>;
};
const App = () => {
const handleClick = useCallback(() => {
console.log("Button clicked");
}, []);
return <Example onClick={handleClick} />;
};
一方、以下のような場合には、useMemoを使いましょう。
const Example = ({ count }) => {
const result = useMemo(() => {
return count * 2;
}, [count]);
return <div>Result: {result}</div>;
};
const App = () => {
const [count, setCount] = useState(0);
return (
<>
<button onClick={() => setCount(count + 1)}>Increment</button>
<Example count={count} />
</>
);
};
以上のように、useCallbackとuseMemo
の違いと使い分けについて解説しました。useCallbackは、関数の生成を最適化するために使用され、useMemoは、計算結果をキャッシュするために使用されます。適切に使い分けることで、コンポーネントのパフォーマンスを最適化することができます。