カスタムドキュメント
カスタム Document
は、ページのレンダリングに使用される <html>
タグと <body>
タグを更新できます。
デフォルトの Document
をオーバーライドするには、以下に示すように pages/_document
ファイルを作成します:
補足:
_document
はサーバー側でのみレンダリングされるため、onClick
のようなイベントハンドラはこのファイルで使用できません。- ページを適切にレンダリングするには、
<Html>
、<Head />
、<Main />
、<NextScript />
が必要です。
注意点
_document
で使用される<Head />
コンポーネントは、next/head
のものとは異なります。ここで使用される<Head />
コンポーネントは、すべてのページで共通の<head>
コードにのみ使用する必要があります。<title>
タグなど、その他のすべてのケースでは、ページやコンポーネントでnext/head
を使用することをお勧めします。<Main />
の外部にあるReactコンポーネントはブラウザによって初期化されません。アプリケーションのロジックやカスタムCSS(styled-jsx
など)をここに追加しないでください。すべてのページで共有するコンポーネント(メニューやツールバーなど)が必要な場合は、代わりにレイアウトをお読みください。Document
は現在、getStaticProps
やgetServerSideProps
などの Next.js のデータフェッチングメソッドをサポートしていません。
renderPage
のカスタマイズ
renderPage
のカスタマイズは高度な操作で、CSS-in-JSなどのライブラリでサーバーサイドレンダリングをサポートする場合にのみ必要です。組み込みの styled-jsx
サポートには不要です。
このパターンの使用はお勧めしません。 代わりに、段階的に App Router を採用することを検討してください。これにより、ページとレイアウトのデータをより簡単にフェッチできます。
補足:
_document
のgetInitialProps
はクライアント側の遷移中は呼び出されません。_document
のctx
オブジェクトは、renderPage
の追加を除いて、getInitialProps
で受け取るものと同等です。