カスタムフックを作成してReactアプリをもっと効率化する方法

カスタムフックを作成してReactアプリをもっと効率化する方法

カスタムフックを使用すると、Reactコンポーネントのロジックを再利用可能な形で抽出し、コードをよりシンプルでメンテナンスしやすくできます。この記事ではカスタムフックの作成方法と実用例を紹介します。

カスタムフックとは何か

カスタムフックはReactのフックを組み合わせて作成される再利用可能な関数です。`use`で始まる名前を付けるのが一般的です。

カスタムフックの基本構造

カスタムフックは通常、関数として定義され、他のフックを内部で使用します。

import { useState, useEffect } from 'react';

function useCustomHook() {
  const [state, setState] = useState(null);

  useEffect(() => {
    // サイドエフェクト処理
  }, []);

  return state;
}

状態管理をカスタムフックで抽出

コンポーネントから状態管理ロジックを抽出して再利用します。

function useWindowSize() {
  const [size, setSize] = useState(window.innerWidth);

  useEffect(() => {
    const handleResize = () => setSize(window.innerWidth);
    window.addEventListener('resize', handleResize);
    return () => window.removeEventListener('resize', handleResize);
  }, []);

  return size;
}

APIリクエスト用のカスタムフック

データ取得ロジックをカスタムフックとして抽出します。

function useFetch(url) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetch(url)
      .then(response => response.json())
      .then(result => {
        setData(result);
        setLoading(false);
      });
  }, [url]);

  return { data, loading };
}

フォーム入力管理のカスタムフック

フォーム状態を管理するカスタムフックを作成します。

function useForm(initialValues) {
  const [values, setValues] = useState(initialValues);

  const handleChange = (e) => {
    const { name, value } = e.target;
    setValues({ ...values, [name]: value });
  };

  return { values, handleChange };
}

カスタムフックの引数と戻り値

引数を活用してフックの柔軟性を高めます。

カスタムフックのテスト

JestやReact Testing Libraryを使用してカスタムフックをテストします。

import { renderHook, act } from '@testing-library/react-hooks';
import useCounter from './useCounter';

test('should increment counter', () => {
  const { result } = renderHook(() => useCounter());
  act(() => result.current.increment());
  expect(result.current.count).toBe(1);
});

エラーハンドリングを組み込む

APIリクエストなどで発生するエラーを処理する仕組みを追加します。

依存関係の管理

useEffectやuseMemoの依存配列を適切に管理して無駄な再レンダリングを防ぎます。

再利用性の向上

カスタムフックは複数のコンポーネント間で再利用されることを意識して設計します。

React DevToolsでカスタムフックをデバッグ

React DevToolsを使用してカスタムフックの状態を確認します。

パフォーマンスの最適化

useMemoやuseCallbackを組み合わせてパフォーマンスを向上させます。

よく使われるカスタムフックの例

一般的に使用されるカスタムフックのパターンをいくつか紹介します。

まとめ

カスタムフックを活用することで、Reactアプリケーションのコードがよりシンプルで再利用可能になり、メンテナンス性が向上します。