Open3
Client-side Fetching
クライアント側のデータ取得は以下のケースで便利
- ページがSEOインデックスを必要としない場合
- データを事前にレンダリングする必要がない場合
- ページのコンテンツが頻繁に更新される必要がある場合
サーバー側レンダリング API とは異なり、
クライアント側データ取得はコンポーネント レベルで使用できる。
ページレベルで行われる場合、データは実行時にフェッチされ、
データの変更に応じてページのコンテンツが更新。
コンポーネントレベルで使用される場合、
データはコンポーネントのマウント時にフェッチされ、
データの変更に応じてコンポーネントのコンテンツが更新。
クライアントサイドのデータ・フェッチを使用すると、
アプリケーションのパフォーマンスやページのロード速度に影響を与える可能性がある。
これは、データ・フェッチがコンポーネントやページのマウント時に行われ、
データがキャッシュされないためです。
Client-side data fetching with useEffect
次の例では、useEffectフックを使ってクライアント側でデータを取得する方法を示す。
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の開発チームは、SWRというデータフェッチ用のReactフックライブラリを作成した。
クライアントサイドでデータを取得する場合は、このライブラリを使うことを強くお勧めする。
キャッシュ、再バリデーション、フォーカストラッキング、インターバルでの再フェッチなどを処理する。
上記と同じ例で、SWRを使ってプロファイルデータを取得することができる。
SWRは自動的にデータをキャッシュし、データが古くなった場合は再検証を行う。
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>
)
}