getInitialProps
補足:
getInitialPropsはレガシー API です。代わりにgetStaticPropsまたはgetServerSidePropsを使用することをお勧めします。
getInitialProps は、ページでデフォルトエクスポートされる React コンポーネントに追加できる async 関数です。この関数は、サーバーサイドで実行され、ページ遷移中にクライアントサイドでも再度実行されます。関数の結果は、props として React コンポーネントに渡されます。
pages/index.tsx
import { NextPageContext } from 'next'
Page.getInitialProps = async (ctx: NextPageContext) => {
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const json = await res.json()
return { stars: json.stargazers_count }
}
export default function Page({ stars }: { stars: number }) {
return stars
}知っておくと良いこと:
getInitialPropsから返されるデータは、サーバーレンダリング時にシリアライズされます。getInitialPropsから返されるオブジェクトは、プレーンなObjectであることを確認し、Date、Map、Setを使用しないでください。- 最初のページロードでは、
getInitialPropsはサーバーでのみ実行されます。その後、next/linkコンポーネントを使用して別のルートに移動するか、next/routerを使用して移動する際に、getInitialPropsはクライアントでも実行されます。- カスタム
_app.jsでgetInitialPropsが使用され、ナビゲート先のページがgetServerSidePropsを使用している場合、getInitialPropsはサーバーでも実行されます。
Context Object
getInitialProps は、context と呼ばれる単一の引数を受け取ります。これは、以下のプロパティを持つオブジェクトです。
| 名前 | 説明 |
|---|---|
pathname | 現在のルート、/pages 内のページのパス |
query | URL のクエリ文字列。オブジェクトとして解析されます。 |
asPath | ブラウザに表示される実際のパス (クエリを含む) の String |
req | HTTP リクエストオブジェクト (サーバーのみ) |
res | HTTP レスポンスオブジェクト (サーバーのみ) |
err | レンダリング中に発生したエラーオブジェクト |
注意点
getInitialPropsはpages/のトップレベルファイルでのみ使用でき、ネストされたコンポーネントでは使用できません。コンポーネントレベルでのネストされたデータ取得については、App Router の検討をお勧めします。- ルートが静的か動的かに関わらず、
getInitialPropsからpropsとして返されたデータは、最初の HTML でクライアントサイドから確認できます。これは、ページを正しく ハイドレーション させるためです。クライアントで利用されるべきではない機密情報をpropsに渡さないように注意してください。
役に立ちましたか?