カスタム App コンポーネント

Next.js はページの初期化に App コンポーネントを使用します。これをオーバーライドすることで、ページの初期化を制御し、以下のことが可能です:

使用方法

デフォルトの App をオーバーライドするには、以下のように pages/_app ファイルを作成します:

import type { AppProps } from 'next/app'

export default function MyApp({ Component, pageProps }: AppProps) {
  return <Component {...pageProps} />
}

Component プロパティは現在の page を表すため、ルート間を移動するたびに Component は新しい page に変わります。したがって、Component に渡すすべてのプロパティは page で受け取られます。

pageProps は、データ取得方法のいずれかであらかじめ読み込まれた初期プロパティを持つオブジェクトです。それ以外の場合は空のオブジェクトになります。

知っておくと良いこと:

  • アプリが実行中にカスタム App を追加した場合、開発サーバーを再起動する必要があります。これは pages/_app.js が以前存在しなかった場合にのみ必要です。
  • AppgetStaticPropsgetServerSideProps などの Next.js のデータ取得方法をサポートしていません。

App での getInitialProps の使用

AppgetInitialProps を使用すると、getStaticProps を持たないページの自動静的最適化が無効になります。

このパターンの使用は推奨しません。代わりに、ページやレイアウトのデータ取得をより簡単に行える App Router の段階的採用を検討してください。

import App, { AppContext, AppInitialProps, AppProps } from 'next/app'

type AppOwnProps = { example: string }

export default function MyApp({
  Component,
  pageProps,
  example,
}: AppProps & AppOwnProps) {
  return (
    <>
      <p>Data: {example}</p>
      <Component {...pageProps} />
    </>
  )
}

MyApp.getInitialProps = async (
  context: AppContext
): Promise<AppOwnProps & AppInitialProps> => {
  const ctx = await App.getInitialProps(context)

  return { ...ctx, example: 'data' }
}

On this page