Open3
Custom App
Next.jsはAppコンポーネントを使ってページを初期化する。
このコンポーネントをオーバーライドして、
ページの初期化をコントロールすることができる
- ページ変更時に共有レイアウトを作成する
- ページに追加データを注入する
- グローバルCSSを追加する
Usage
デフォルトのAppを上書きするには、以下のようにpages/_appファイルを作成する。
// pages/_app.tsx
import type { AppProps } from 'next/app'
export default function MyApp({ Component, pageProps }: AppProps) {
return <Component {...pageProps} />
}
Component propはアクティブなページなので、
ルート間を移動するときはいつでも、Componentは新しいページに変わる。
したがって、Componentに送信したpropはすべてページによって受信されます。
pagePropsはデータ取得メソッドの1つ。
ページにプリロードされた初期プロップを持つオブジェクトで、
そうでなければ空のオブジェクトです。
getInitialProps with App
AppでgetInitialPropsを使用すると、
getStaticPropsを持たないページの自動静的最適化が無効になる。
このパターンの使用はお勧めしない。
その代わりに、ページやレイアウトのデータをより簡単に取得できる、
App Routerを少しずつ採用することを検討する。
// 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' }
}