Reactのカスタムフックでポーリングを実装する方法を解説!初心者でもわかるリアルタイム更新
生徒
「Reactで最新のデータを常に取得したいんですが、どうすればいいですか?」
先生
「それならポーリングを使う方法があります。一定の間隔でAPIを呼び出して、データを更新する仕組みです。」
生徒
「ポーリングって難しそうですね。Reactで簡単にできますか?」
先生
「カスタムフックを作ればシンプルに書けますよ。では、実際にコードを見ながら仕組みを理解していきましょう。」
1. ポーリングとは?初心者向けの解説
ポーリングとは、一定の間隔ごとにサーバーにリクエストを送ってデータを更新する仕組みのことです。例えば「毎秒ごとに新しいメールが届いているか確認する」といった使い方ができます。
リアルタイム性が重要なアプリ、例えばチャットや株価の更新、センサーのデータ取得などに役立ちます。初心者の方は「定期的にリロードして最新の情報を取りに行く」イメージを持つと理解しやすいでしょう。
2. Reactでポーリングを実装するメリット
Reactアプリでポーリングを実装すると、ユーザーがリロードしなくても自動で最新のデータが表示されます。これによりユーザー体験が向上します。
さらに、カスタムフックにまとめることで複数のコンポーネントで簡単に再利用でき、コードの見通しも良くなります。
3. カスタムフックでポーリングを作る基本
ポーリングの仕組みは、JavaScriptのsetIntervalを使って定期的にAPIを呼び出します。ReactではuseEffectを組み合わせて書き、カスタムフックにまとめます。
import { useState, useEffect } from "react";
function usePollingAPI(url, interval = 5000) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
let timer;
const fetchData = async () => {
try {
const res = await fetch(url);
const json = await res.json();
setData(json);
setError(null);
} catch (err) {
setError(err);
} finally {
setLoading(false);
}
};
fetchData(); // 初回実行
timer = setInterval(fetchData, interval); // 定期的に実行
return () => clearInterval(timer); // クリーンアップ
}, [url, interval]);
return { data, loading, error };
}
export default usePollingAPI;
4. コンポーネントでポーリングを使う例
作成したカスタムフックをコンポーネントで使ってみましょう。ここでは記事の一覧を定期的に更新する例を紹介します。
import React from "react";
import usePollingAPI from "./usePollingAPI";
function Posts() {
const { data, loading, error } = usePollingAPI("https://jsonplaceholder.typicode.com/posts", 3000);
if (loading) return <p>読み込み中です...</p>;
if (error) return <p>エラーが発生しました: {error.message}</p>;
return (
<ul>
{data.slice(0, 5).map(post => (
<li key={post.id}>{post.title}</li>
))}
</ul>
);
}
export default Posts;
5. ポーリングの注意点
ポーリングは便利ですが、以下のような注意点もあります。
- 間隔を短くしすぎるとサーバーに負荷がかかる
- 不要なときはポーリングを停止しないと無駄な通信が発生する
- エラー処理をしっかり入れないと正しく動作しなくなる
そのため、必要に応じてポーリングの間隔を調整したり、特定の画面を開いているときだけ実行する工夫が大切です。
6. ポーリングを活用できる場面
ポーリングは次のようなアプリでよく使われます。
- チャットアプリで新しいメッセージを定期的に取得する
- 株価や仮想通貨の価格を更新し続ける
- IoTデバイスのセンサー情報を定期的に読み取る
このように「常に最新の情報が必要な場面」でポーリングはとても役立ちます。