プログラミングHUB
language7分で読めます

React Hooks入門|useState・useEffectから実践パターンまで

React Hooks初心者向けの入門ガイド。useState、useEffect、useContextなど主要なHooksの使い方と、カスタムHooksの作り方を実例付きで解説します。

関連記事:React vs Vue.js徹底比較

React Hooksは、関数コンポーネントで状態管理や副作用を扱うための仕組みです。2019年に導入されて以来、Reactの標準的な開発スタイルになっています。

React Hooksとは

以前のReactでは、状態管理にはクラスコンポーネントを使う必要がありました。Hooksの登場により、関数コンポーネントでも同等の機能が使えるようになりました。

Hooksのメリット

  • コードがシンプルになる
  • ロジックの再利用がしやすい(カスタムHooks)
  • クラスの this に悩まされない
  • テストが書きやすい

基本のHooks

useState:状態管理

コンポーネント内で変化する値を管理します。

import { useState } from 'react';

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

  return (
    <div>
      <p>カウント: {count}</p>
      <button onClick={() => setCount(count + 1)}>+1</button>
      <button onClick={() => setCount(0)}>リセット</button>
    </div>
  );
}

ポイント:

  • useState(初期値) で状態変数と更新関数を取得
  • 更新関数を呼ぶとコンポーネントが再レンダリングされる
  • オブジェクトや配列も管理可能

useEffect:副作用の処理

データの取得、DOM操作、タイマーなど、レンダリング以外の処理を行います。

import { useState, useEffect } from 'react';

function UserProfile({ userId }) {
  const [user, setUser] = useState(null);

  useEffect(() => {
    fetch(`/api/users/${userId}`)
      .then(res => res.json())
      .then(data => setUser(data));

    // クリーンアップ関数(コンポーネント破棄時に実行)
    return () => {
      console.log('cleanup');
    };
  }, [userId]); // userIdが変わるたびに実行

  if (!user) return <p>読み込み中...</p>;
  return <h1>{user.name}</h1>;
}

依存配列のルール:

  • []:マウント時に1回だけ実行
  • [value]:valueが変わるたびに実行
  • 省略:毎回のレンダリング後に実行(非推奨)

useContext:コンテキストの利用

propsを深くバケツリレーせずに、コンポーネントツリー全体で値を共有できます。

import { createContext, useContext } from 'react';

const ThemeContext = createContext('light');

function ThemedButton() {
  const theme = useContext(ThemeContext);
  return <button className={theme}>ボタン</button>;
}

実践でよく使うHooks

useRef:DOM参照・値の保持

import { useRef } from 'react';

function TextInput() {
  const inputRef = useRef(null);

  const focusInput = () => {
    inputRef.current.focus();
  };

  return (
    <>
      <input ref={inputRef} type="text" />
      <button onClick={focusInput}>フォーカス</button>
    </>
  );
}

useMemo・useCallback:パフォーマンス最適化

重い計算やコールバック関数のメモ化に使います。

Tailwind CSS入門も参考にしてください。

import { useMemo, useCallback } from 'react';

function ExpensiveComponent({ items, onSelect }) {
  // 重い計算をメモ化
  const sortedItems = useMemo(
    () => items.sort((a, b) => a.price - b.price),
    [items]
  );

  // コールバック関数をメモ化
  const handleClick = useCallback(
    (id) => onSelect(id),
    [onSelect]
  );

  return sortedItems.map(item => (
    <div key={item.id} onClick={() => handleClick(item.id)}>
      {item.name}
    </div>
  ));
}

カスタムHooks

ロジックを再利用可能な形で切り出せます。

function useLocalStorage(key, initialValue) {
  const [value, setValue] = useState(() => {
    const stored = localStorage.getItem(key);
    return stored ? JSON.parse(stored) : initialValue;
  });

  useEffect(() => {
    localStorage.setItem(key, JSON.stringify(value));
  }, [key, value]);

  return [value, setValue];
}

// 使用例
function Settings() {
  const [theme, setTheme] = useLocalStorage('theme', 'light');
  return <button onClick={() => setTheme('dark')}>ダークモード</button>;
}

学習ロードマップ

  1. useStateuseEffect を使いこなす(3〜5日)

Jestテスト入門も参考にしてください。

  1. useContext でグローバルな状態管理を学ぶ(2〜3日)
  2. useRefuseMemo の使い所を理解する(2〜3日)
  3. カスタムHooks を作ってみる(3〜5日)
  4. 実際のプロジェクトで組み合わせて使う
PR楽天ブックス プログラミング書籍楽天ブックスでプログラミング入門書を探す公式サイトで詳細を見る※本コンテンツはアフィリエイト広告を含みます。表示内容は各社公式サイトをご確認ください。

まとめ

React Hooksは、まずuseStateとuseEffectの2つをしっかり理解することが重要です。この2つが使えれば、多くのケースに対応できます。慣れてきたらカスタムHooksを作り、ロジックの再利用を進めていきましょう。


あわせて読みたい

あなたに合う次の選び方を見る

30秒で診断してみる
#React#React Hooks#JavaScript#フロントエンド#Web開発

関連記事