Reactアプリケーションでデータをサーバーから取得することは、現代のウェブ開発において不可欠なスキルです。データの取得方法を理解し、効率的に実装することが、ユーザーエクスペリエンスを向上させ、アプリケーションのパフォーマンスを最適化します。本記事では、Reactでのデータの取得方法について完全かつ包括的に解説します。
1. Reactでのデータ取得の基本
Reactでは、サーバーからデータを取得するために、通常は「API呼び出し」を行います。これは、バックエンドサーバーや外部サービスからデータを取得し、そのデータをアプリケーションの状態として管理するプロセスです。データをサーバーから取得するために、主に次のような方法を使用します。

- fetch API(ネイティブJavaScript)
- Axios(外部ライブラリ)
- React Query(データフェッチングのためのライブラリ)
- Redux Toolkit Query(状態管理とデータフェッチを統合するライブラリ)
2. fetch
APIを使用してデータを取得
fetch
は、JavaScript標準のAPIであり、サーバーからデータを取得するために最も一般的に使用されます。Reactで使用する際、データの取得は通常、コンポーネントがマウントされたタイミングで行います。
サンプルコード(fetch
を使用)
javascriptimport React, { useState, useEffect } from 'react';
const DataFetchingComponent = () => {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
fetch('https://api.example.com/data')
.then((response) => response.json())
.then((data) => {
setData(data);
setLoading(false);
})
.catch((error) => {
setError(error);
setLoading(false);
});
}, []);
if (loading) return <p>Loading...p>;
if (error) return <p>Error: {error.message}p>;
return (
<div>
<h1>Data:h1>
<pre>{JSON.stringify(data, null, 2)}pre>
div>
);
};
export default DataFetchingComponent;
説明
- **
useState
**でデータ、読み込み状態、エラー状態を管理します。 - **
useEffect
**を使用してコンポーネントのマウント時にfetch
リクエストを送信します。 - データが取得できると、状態を更新し、UIを再描画します。
- エラーハンドリングも行っており、失敗した場合にはエラーメッセージを表示します。
3. Axiosを使用してデータを取得
Axios
は、PromiseベースのHTTPクライアントライブラリで、fetch
よりも多機能で使いやすいと感じる開発者も多いです。特に、レスポンスの構造を簡単に管理でき、リクエストのインターセプト機能などが便利です。
Axiosのインストール
bashnpm install axios
サンプルコード(Axios
を使用)
javascriptimport React, { useState, useEffect } from 'react';
import axios from 'axios';
const DataFetchingComponent = () => {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
axios
.get('https://api.example.com/data')
.then((response) => {
setData(response.data);
setLoading(false);
})
.catch((error) => {
setError(error);
setLoading(false);
});
}, []);
if (loading) return <p>Loading...p>;
if (error) return <p>Error: {error.message}p>;
return (
<div>
<h1>Data:h1>
<pre>{JSON.stringify(data, null, 2)}pre>
div>
);
};
export default DataFetchingComponent;
説明
Axios
を使用することで、fetch
と比べてコードが簡潔になります。- レスポンスのデータは
response.data
として取得されます。 - エラーハンドリングもシンプルで、
catch
ブロックを使ってエラーを処理します。
4. React Queryを使用したデータ取得
React Query
は、Reactアプリケーションでデータの取得、キャッシュ、更新を簡単に管理するためのライブラリです。データフェッチングの状態(ローディング、エラー、データ)を簡単に管理できるのが特徴です。
React Queryのインストール
bashnpm install react-query
サンプルコード(React Query
を使用)
javascriptimport React from 'react';
import { useQuery } from 'react-query';
const fetchData = async () => {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
};
const DataFetchingComponent = () => {
const { data, error, isLoading } = useQuery('data', fetchData);
if (isLoading) return <p>Loading...p>;
if (error) return <p>Error: {error.message}p>;
return (
<div>
<h1>Data:h1>
<pre>{JSON.stringify(data, null, 2)}pre>
div>
);
};
export default DataFetchingComponent;
説明
useQuery
は、データのフェッチを簡単に管理します。fetchData
関数は、サーバーからデータを取得する非同期関数です。useQuery
フックは、データの取得状態(ローディング、エラー、データ)を返します。- React Queryは内部的にキャッシュを管理しており、再フェッチを最小限に抑えるため、ユーザー体験が向上します。
5. Redux Toolkit Queryを使用したデータ取得
Redux Toolkit Query
(RTK Query)は、Redux Toolkitに組み込まれた強力なデータフェッチングのツールです。状態管理とデータフェッチを統合して、APIリクエストのコードをシンプルに保つことができます。
Redux Toolkit Queryのインストール
bashnpm install @reduxjs/toolkit react-redux
サンプルコード(RTK Query
を使用)
javascriptimport React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { fetchData } from './services/apiSlice';
const DataFetchingComponent = () => {
const dispatch = useDispatch();
const { data, error, isLoading } = useSelector((state) => state.api);
React.useEffect(() => {
dispatch(fetchData());
}, [dispatch]);
if (isLoading) return <p>Loading...p>;
if (error) return <p>Error: {error.message}p>;
return (
<div>
<h1>Data:h1>
<pre>{JSON.stringify(data, null, 2)}pre>
div>
);
};
export default DataFetchingComponent;
説明
RTK Query
は、Reduxのストアと統合されており、データの取得、キャッシュ、エラーハンドリングを自動で管理します。fetchData
は、APIエンドポイントを呼び出してデータを取得する非同期アクションです。
6. まとめ
Reactでデータをサーバーから取得するための方法は多岐にわたりますが、最も一般的なのはfetch
やAxios
を使った手法です。最近では、React Query
やRTK Query
などのライブラリが登場し、データフェッチングの作業をより効率的に、かつ管理しやすくしています。
- シンプルな用途では
fetch
やAxios
を使用。 - 高度な状態管理やキャッシュ機能が必要な場合は、
React Query
やRTK Query
を検討しましょう。
これらのツールを適切に使い分けることで、Reactアプリケーションのパフォーマンスやユーザー体験を最適化することができます。