Custom App
Next.js は、ページを初期化するためにApp
component を使用します。それを上書きして、ページの初期化と:
- ページ変更間で共有の layout を作成する
- ページに追加データを注入する
- グローバル CSS を追加する
Usage
App
の default をオーバーライドするには、以下に示すようにpages/_app
というファイルを作成してください:
pages/_app.tsx
import type { AppProps } from 'next/app'
export default function MyApp({ Component, pageProps }: AppProps) {
return <Component {...pageProps} />
}
pages/_app.jsx
export default function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />
}
Component
プロップはアクティブなpage
で、routes 間を移動するたびに、Component
は新しいpage
に変わります。したがって、Component
に送信した props はすべてpage
が受け取ります。
pageProps
は、私たちのデータ取得 Methodのいずれかによってページのために事前にロードされた初期の props を含む empty object です。それ以外の場合は、空の object です。
Good to know
- あなたの app が稼働していて、カスタム
App
を追加した場合、 development server を再起動する必要があります。pages/_app.js
が以前に存在しなかった場合にのみ必要です。App
は、Next.js のデータ取得方法、getStaticProps
やgetServerSideProps
などをサポートしていません。
getInitialProps
with App
getInitialProps
をApp
で使うと、getStaticProps
がないページについてのAutomatic Static Optimizationが無効になります。
**このパターンの使用はお勧めしません。**代わりに、徐々に採用することを検討してみてください。 App Router 。これにより、ページとレイアウトのデータをもっと簡単に fetch できます。
pages/_app.tsx
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' }
}
pages/_app.jsx
import App from 'next/app'
export default function MyApp({ Component, pageProps, example }) {
return (
<>
<p>Data: {example}</p>
<Component {...pageProps} />
</>
)
}
MyApp.getInitialProps = async (context) => {
const ctx = await App.getInitialProps(context)
return { ...ctx, example: 'data' }
}