Lang x Lang

Client-side Fetching

Client 側のデータ取得は、ページが require SEO インデキシングを必要としない場合、データを事前にレンダリングする必要がない場合、またはページの内容を頻繁に更新する必要がある場合に便利です。 server-side renderingAPI とは異なり、Client 側のデータ取得は component レベルで使用することができます。

ページレベルで行われた場合、データは runtime で取得され、データが変更されるとページの内容が更新されます。 component レベルで使用された場合、データは component のマウント時に取得され、データが変更されると component の内容が更新されます。

Client・サイドデータフェッチングを使用すると、アプリケーションのパフォーマンスとページの読み込み速度に影響を与える可能性があることに注意が必要です。これは、データのフェッチングが component やページのマウント時に行われ、データがキャッシュされないためです。

Client-side data fetching with useEffect

次の例は、あなたが client 側で useEffect hook を使用してデータを fetch する方法を示しています。

import { useState, useEffect } from "react";

function Profile() {
  const [data, setData] = useState(null);
  const [isLoading, setLoading] = useState(true);

  useEffect(() => {
    fetch("/api/profile-data")
      .then((res) => res.json())
      .then((data) => {
        setData(data);
        setLoading(false);
      });
  }, []);

  if (isLoading) return <p>Loading...</p>;
  if (!data) return <p>No profile data</p>;

  return (
    <div>
      <h1>{data.name}</h1>
      <p>{data.bio}</p>
    </div>
  );
}

Client-side data fetching with SWR

Next.js の開発チームが、データ取得用の React hook library を作成しました。その名もSWR です。Client サイドでデータを取得している場合、非常におすすめです。キャッシュ管理、再検証、フォーカストラッキング、定期的な再取得など、さまざまな機能を取り扱っています。

上記と同じ例を用いて、今度は SWR を使って fetch プロファイルデータを取得できます。SWR は自動的にデータを cache してくれ、データが stale になった場合には revalidate してくれます。

SWR の使用方法についての詳細は、SWR docs をご覧ください。

import useSWR from "swr";

const fetcher = (...args) => fetch(...args).then((res) => res.json());

function Profile() {
  const { data, error } = useSWR("/api/profile-data", fetcher);

  if (error) return <div>Failed to load</div>;
  if (!data) return <div>Loading...</div>;

  return (
    <div>
      <h1>{data.name}</h1>
      <p>{data.bio}</p>
    </div>
  );
}

当社サイトでは、Cookie を使用しています。各規約をご確認の上ご利用ください:
Cookie Policy, Privacy Policy および Terms of Use