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
もサーバー上で実行されます。
コンテキストオブジェクト
getInitialProps
は、次のプロパティを持つオブジェクトである`context`という単一の引数を受け取ります。
名前 | 説明 |
---|---|
pathname | 現在のルート、`/pages`内のページのパス |
query | URLのクエリ文字列、オブジェクトとして解析済み |
asPath | ブラウザに表示される実際のパス(クエリを含む)の`String` |
req | HTTPリクエストオブジェクト (サーバーのみ) |
res | HTTPレスポンスオブジェクト (サーバーのみ) |
err | レンダリング中にエラーが発生した場合のエラーオブジェクト |
注意点
getInitialProps
は、`pages/`のトップレベルファイルでのみ使用でき、ネストされたコンポーネント内では使用できません。コンポーネントレベルでネストされたデータの取得を行うには、App Routerを検討してください。- ルートが静的か動的かに関係なく、
getInitialProps
からprops
として返されたデータは、クライアントサイドで初期HTML上で確認できます。これは、ページを正しくハイドレートするために必要です。props
に、クライアント側で公開すべきではない機密情報を含めないようにしてください。
役に立ちましたか?