getInitialProps
知っておくと便利:
getInitialProps
はレガシーAPIです。代わりにgetStaticProps
またはgetServerSideProps
の使用を推奨します。
getInitialProps
はページのデフォルトエクスポートされたReactコンポーネントに追加できる async
関数です。サーバーサイドで実行され、ページ遷移時にはクライアントサイドでも再度実行されます。この関数の結果は props
としてReactコンポーネントに渡されます。
知っておくと便利:
getInitialProps
から返されるデータはサーバーサイドレンダリング時にシリアライズされます。返されるオブジェクトがプレーンなObject
であることを確認し、Date
、Map
、Set
を使用しないでください。- 初期ページロード時、
getInitialProps
はサーバーでのみ実行されます。その後、next/link
コンポーネントやnext/router
を使用して別のルートに遷移する場合、クライアントサイドでも実行されます。- カスタム
_app.js
でgetInitialProps
が使用され、遷移先のページがgetServerSideProps
を使用している場合、getInitialProps
はサーバーサイドでも実行されます。
コンテキストオブジェクト
getInitialProps
は context
という単一の引数を受け取り、以下のプロパティを持つオブジェクトです:
名前 | 説明 |
---|---|
pathname | 現在のルート、/pages 内のページのパス |
query | URLのクエリ文字列、オブジェクトとしてパースされたもの |
asPath | ブラウザに表示される実際のパス(クエリを含む)の文字列 |
req | HTTPリクエストオブジェクト (サーバーサイドのみ) |
res | HTTPレスポンスオブジェクト (サーバーサイドのみ) |
err | レンダリング中にエラーが発生した場合のエラーオブジェクト |
注意点
getInitialProps
はpages/
トップレベルのファイルでのみ使用可能で、ネストされたコンポーネントでは使用できません。コンポーネントレベルでネストされたデータ取得が必要な場合は、App Router の使用を検討してください。- ルートが静的か動的かに関係なく、
getInitialProps
からprops
として返されるデータは、初期HTMLでクライアントサイドから確認可能です。これはページが正しくハイドレートされるためです。クライアントで利用可能にしてはいけない機密情報をprops
に含めないように注意してください。