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
は、計算結果をキャッシュするために使用されます。適切に使い分けることで、コンポーネントのパフォーマンスを最適化することができます。