Benutzerdefinierte App
Next.js verwendet die App
-Komponente zur Initialisierung von Seiten. Sie können diese überschreiben und die Seiteninitialisierung steuern sowie:
- Ein gemeinsames Layout zwischen Seitenwechseln erstellen
- Zusätzliche Daten in Seiten einfügen
- Globales CSS hinzufügen
Verwendung
Um die standardmäßige App
zu überschreiben, erstellen Sie die Datei pages/_app
wie unten gezeigt:
import type { AppProps } from 'next/app'
export default function MyApp({ Component, pageProps }: AppProps) {
return <Component {...pageProps} />
}
export default function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />
}
Die Component
-Prop ist die aktive page
, daher ändert sich Component
bei Navigation zwischen Routen zur neuen page
. Alle Props, die Sie an Component
senden, werden somit von der page
empfangen.
pageProps
ist ein Objekt mit den initialen Props, die für Ihre Seite durch eine unserer Datenabrufmethoden vorab geladen wurden, andernfalls ist es ein leeres Objekt.
Gut zu wissen
- Wenn Ihre App läuft und Sie eine benutzerdefinierte
App
hinzufügen, müssen Sie den Entwicklungsserver neu starten. Nur erforderlich, wennpages/_app.js
zuvor nicht existierte.App
unterstützt keine Next.js Datenabrufmethoden wiegetStaticProps
odergetServerSideProps
.
getInitialProps
mit App
Die Verwendung von getInitialProps
in App
deaktiviert die Automatische Statische Optimierung für Seiten ohne getStaticProps
.
Wir empfehlen dieses Muster nicht. Erwägen Sie stattdessen die schrittweise Einführung des App-Routers, der das Abrufen von Daten für Seiten und Layouts einfacher ermöglicht.
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' }
}
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' }
}