0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

React 主要なフックの違いとユースケース

Posted at

React hooks

Reactには多くのフックがありますが、その中でも useEffectuseMemouseCallback は、パフォーマンス最適化や副作用処理に関係する重要なフックです。本記事では、それぞれの役割、違い、そして適切なユースケースについて詳しく解説します。


1. useEffect - 副作用を管理する

役割

useEffect はコンポーネントのライフサイクルに応じて副作用を実行するためのフックです。データの取得、購読の管理、DOM の操作などが主な用途です。

使い方

import { useEffect, useState } from 'react';

function Example() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `You clicked ${count} times`;
  }, [count]); // countが変更されるたびに実行

  return (
    <button onClick={() => setCount(count + 1)}>
      Click me
    </button>
  );
}

ユースケース

  • データのフェッチ (APIリクエスト)
  • イベントリスナーの登録・解除
  • DOMの操作 (タイトルの変更など)
  • クリーンアップ処理 (コンポーネントのアンマウント時)

2. useMemo - 値のメモ化

役割

useMemo は計算コストの高い処理の結果をメモ化するためのフックです。依存する値が変わらない限り、再計算を避けることでパフォーマンスを向上させます。

使い方

import { useMemo, useState } from 'react';

function ExpensiveCalculationComponent({ num }) {
  const expensiveValue = useMemo(() => {
    console.log('Expensive calculation');
    return num * 2;
  }, [num]);

  return <div>Computed Value: {expensiveValue}</div>;
}

ユースケース

  • 計算コストの高い関数の結果をキャッシュ
  • リストのフィルタリングやソートの最適化
  • 大きなデータ処理の負荷軽減

3. useCallback - 関数のメモ化

役割

useCallback は関数をメモ化するためのフックで、コンポーネントの再レンダリング時に同じ関数インスタンスを維持するのに役立ちます。特に、子コンポーネントにコールバック関数を渡す場合に、不要な再レンダリングを防ぐために使われます。

使い方

import { useState, useCallback } from 'react';

function Button({ handleClick }) {
  return <button onClick={handleClick}>Click Me</button>;
}

function Parent() {
  const [count, setCount] = useState(0);

  const handleClick = useCallback(() => {
    setCount(prevCount => prevCount + 1);
  }, []); // 依存配列が空なので、常に同じ関数インスタンスを保持

  return (
    <div>
      <Button handleClick={handleClick} />
      <p>Count: {count}</p>
    </div>
  );
}

ユースケース

  • 子コンポーネントに渡すコールバック関数をメモ化 (不要な再レンダリングを防ぐ)
  • イベントハンドラの最適化
  • 依存関係リストの変化を抑える

4. useEffectuseMemouseCallback の違い

フック 目的 主な用途
useEffect 副作用を管理 APIリクエスト、イベントリスナーの登録・解除
useMemo 計算結果をメモ化 高コストな計算の最適化
useCallback 関数のメモ化 子コンポーネントへの関数の再レンダリング防止

まとめ

  • useEffect は副作用処理(APIリクエスト、イベントリスナーの登録・解除など)に使用
  • useMemo は高コストな計算を最適化し、無駄な再計算を防ぐ
  • useCallback は関数のメモ化に使用し、子コンポーネントの無駄な再レンダリングを防ぐ

適切なフックを選択することで、Reactアプリのパフォーマンスを向上させることができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?