React Hooks 入門完全ガイド【2025年最新版】
🚀 はじめに
React Hooks は、関数コンポーネントで state 管理やライフサイクル機能を利用するための強力な機能です。 本記事では、React Hooks の基本的な概念から、実践的な使用方法までを、初心者の方にも分かりやすく解説します。従来のクラスコンポーネントに比べて、より簡潔で再利用性の高いコードを書くことができるようになります。React Hooks をマスターして、モダンな React 開発を始めましょう!
この記事で学べること
- useState フックを使った state 管理の基礎
- useEffect フックを使った side effect の処理方法
- カスタムフックの作成と再利用
- Hooks を使った実践的なアプリケーション開発
📚 基礎知識
React Hooks は React 16.8 で導入されました。Hooks を使うことで、関数コンポーネントでも state を持ち、ライフサイクルメソッドのような機能を利用できるようになります。Hooks を使う主なメリットは、以下の通りです。
- コードの簡潔化: クラスコンポーネントに比べて、より簡潔なコードで state 管理や side effect を処理できます。
- 再利用性の向上: カスタムフックを作成することで、ロジックを再利用できます。
- 可読性の向上: コードの構造が分かりやすくなり、可読性が向上します。
💡 重要なポイント
Hooks は関数コンポーネントでのみ使用できます。クラスコンポーネントでは使用できません。 また、Hooks はコンポーネントの最上位から呼び出す必要があります。ループや条件分岐の中で呼び出すことはできません。
🔍 詳細解説
Hooks には様々な種類がありますが、最も基本的な Hooks は useState と useEffect です。
useState フック
useState フックは、state 変数と state を更新するための関数を返します。以下の例を見てみましょう。
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
const increment = () => {
setCount(count + 1);
};
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>Increment</button>
</div>
);
}
export default Counter;
この例では、useState(0) で初期値が 0 の state 変数 count を作成しています。 setCount 関数を使って state を更新することができます。
useEffect フック
useEffect フックは、side effect を処理するために使用します。side effect とは、コンポーネントのレンダリングに影響を与える処理のことです。例えば、API の呼び出しや DOM の操作などが side effect に該当します。以下の例を見てみましょう。
import React, { useState, useEffect } from 'react';
function DataFetcher() {
const [data, setData] = useState(null);
useEffect(() => {
async function fetchData() {
const response = await fetch('https://api.example.com/data');
const json = await response.json();
setData(json);
}
fetchData();
}, []);
return (
<div>
{data ? <p>Data: {data.name}</p> : <p>Loading...</p>}
</div>
);
}
export default DataFetcher;
この例では、useEffect(() => { … }, []) で、コンポーネントのマウント時に API を呼び出し、データを state に設定しています。第2引数の [] は、依存配列と呼ばれ、この配列が空の場合、コンポーネントのマウント時に一度だけ処理が実行されます。
useEffect フックは、コンポーネントのライフサイクルメソッドの代替として使用できます。 componentDidMount、componentDidUpdate、componentWillUnmount の機能を、useEffect フックで表現できます。
— React 公式ドキュメント
⚡ 実践ガイド
ここでは、Hooks を使った実践的なアプリケーション開発の例を紹介します。
ステップ1: フォーム入力の管理
useState フックを使って、フォームの入力値を管理します。以下の例を見てみましょう。
import React, { useState } from 'react';
function MyForm() {
const [name, setName] = useState('');
const [email, setEmail] = useState('');
const handleSubmit = (event) => {
event.preventDefault();
console.log({ name, email });
};
return (
<form onSubmit={handleSubmit}>
<label>
Name:
<input type="text" value={name} onChange={(e) => setName(e.target.value)} />
</label>
<label>
Email:
<input type="email" value={email} onChange={(e) => setEmail(e.target.value)} />
</label>
<button type="submit">Submit</button>
</form>
);
}
export default MyForm;
ステップ2: API からデータを取得し表示する
useEffect フックを使って、API からデータを取得し、state に設定します。そして、取得したデータを表示します。
🎯 応用編
ここでは、Hooks を使った応用的なテクニックを紹介します。
🔥 カスタムフックの作成
カスタムフックは、再利用可能なロジックを関数にまとめたものです。 以下の例を見てみましょう。
import { useState, useEffect } from 'react';
function useFetch(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
async function fetchData() {
try {
const response = await fetch(url);
const json = await response.json();
setData(json);
} catch (error) {
setError(error);
} finally {
setLoading(false);
}
}
fetchData();
}, [url]);
return { data, loading, error };
}
export default useFetch;
🛠️ トラブルシューティング
ここでは、Hooks を使っている際に発生する可能性のある問題と、その解決策を紹介します。
Q: Hooks を関数コンポーネント以外で使用するとエラーになります。なぜですか?
A: Hooks は React の内部的な仕組みに依存しており、関数コンポーネントでのみ正しく動作するように設計されています。クラスコンポーネントで使用すると、React の内部状態が正しく管理されず、予期しないエラーが発生する可能性があります。
Q: useEffect フックの依存配列を正しく設定しないと、無限ループが発生する場合があります。なぜですか?
A: useEffect フックの依存配列は、useEffect フックが再実行されるタイミングを制御します。依存配列に state や props を含める場合、それらの値が変更されるたびに useEffect フックが再実行されます。依存配列に state や props を含めない場合、useEffect フックはコンポーネントのマウント時に一度だけ実行されます。依存配列を正しく設定しないと、useEffect フックが無限に再実行される可能性があります。
🎉 まとめ
この記事のポイント
- React Hooks は、関数コンポーネントで state 管理やライフサイクル機能を利用するための強力な機能です。
- useState フックと useEffect フックは、Hooks の基本的な Hooks です。
- カスタムフックを作成することで、再利用可能なロジックを関数にまとめることができます。
コメント