26
チャプター26
getStaticPropsの詳細
getStaticProps
について知っておくべき重要な情報です。
外部APIのフェッチまたはデータベースのクエリ
lib/posts.js
では、ファイルシステムからデータをフェッチするgetSortedPostsData
を実装しました。しかし、外部APIエンドポイントなど、他のソースからデータをフェッチすることも可能です。
export async function getSortedPostsData() {
// Instead of the file system,
// fetch post data from an external API endpoint
const res = await fetch('..');
return res.json();
}
注意: Next.jsはクライアントとサーバーの両方で
fetch()
をポリフィルします。インポートする必要はありません。
データベースを直接クエリすることもできます
import someDatabaseSDK from 'someDatabaseSDK'
const databaseClient = someDatabaseSDK.createClient(...)
export async function getSortedPostsData() {
// Instead of the file system,
// fetch post data from a database
return databaseClient.query('SELECT posts...')
}
これは、getStaticProps
がサーバーサイドでのみ実行されるためです。クライアントサイドで実行されることはありません。ブラウザ用のJSバンドルにも含まれません。つまり、ブラウザに送信されることなく、直接データベースクエリなどのコードを記述できます。
開発環境と本番環境
- 開発環境(
npm run dev
またはyarn dev
)では、getStaticProps
はすべてのリクエストで実行されます。 - 本番環境では、
getStaticProps
はビルド時に実行されます。ただし、この動作はgetStaticPaths
によって返されるfallback
キーを使用することで強化できます。
ビルド時に実行されることを意図しているため、クエリパラメータやHTTPヘッダーなど、リクエスト時のみ利用可能なデータを使用することはできません。
ページ内でのみ許可
getStaticProps
はページからのみエクスポートできます。ページ以外のファイルからエクスポートすることはできません。
この制限の理由の1つは、ページがレンダリングされる前にReactが必要なすべてのデータを持っている必要があるためです。
リクエスト時にデータをフェッチする必要がある場合は?
静的生成はビルド時に一度だけ行われるため、頻繁に更新されるデータや、ユーザーのリクエストごとに変化するデータには適していません。
このようにデータが変更される可能性のあるケースでは、サーバーサイドレンダリングを使用できます。次のセクションで、サーバーサイドレンダリングについて詳しく学びましょう。
お役に立ちましたか?