Seiten und Layouts
Der Pages Router basiert auf einem dateibasierten Router nach dem Konzept von Seiten.
Wenn eine Datei zum pages
-Verzeichnis hinzugefügt wird, ist sie automatisch als Route verfügbar.
In Next.js ist eine Seite eine React-Komponente, die aus einer .js
-, .jsx
-, .ts
- oder .tsx
-Datei im pages
-Verzeichnis exportiert wird. Jede Seite ist mit einer Route basierend auf ihrem Dateinamen verknüpft.
Beispiel: Wenn Sie pages/about.js
erstellen, das eine React-Komponente wie unten exportiert, wird sie unter /about
erreichbar sein.
Indexrouten
Der Router leitet Dateien mit dem Namen index
automatisch zur Stammverzeichnis-Route weiter.
pages/index.js
→/
pages/blog/index.js
→/blog
Verschachtelte Routen
Der Router unterstützt verschachtelte Dateien. Wenn Sie eine verschachtelte Ordnerstruktur erstellen, werden Dateien weiterhin automatisch geroutet.
pages/blog/first-post.js
→/blog/first-post
pages/dashboard/settings/username.js
→/dashboard/settings/username
Seiten mit dynamischen Routen
Next.js unterstützt Seiten mit dynamischen Routen. Wenn Sie beispielsweise eine Datei namens pages/posts/[id].js
erstellen, ist sie unter posts/1
, posts/2
usw. erreichbar.
Um mehr über dynamisches Routing zu erfahren, lesen Sie die Dokumentation zu dynamischen Routen.
Layout-Muster
Das React-Modell ermöglicht es uns, eine Seite in eine Reihe von Komponenten zu zerlegen. Viele dieser Komponenten werden häufig zwischen Seiten wiederverwendet. Zum Beispiel könnten Sie auf jeder Seite die gleiche Navigationsleiste und Fußzeile haben.
Beispiele
Einzelnes gemeinsames Layout mit Custom App
Wenn Sie nur ein Layout für Ihre gesamte Anwendung haben, können Sie eine Custom App erstellen und Ihre Anwendung mit dem Layout umschließen. Da die <Layout />
Komponente beim Seitenwechsel wiederverwendet wird, bleibt ihr Komponentenzustand erhalten (z.B. Eingabewerte).
Seitenspezifische Layouts
Wenn Sie mehrere Layouts benötigen, können Sie Ihrer Seite eine getLayout
-Eigenschaft hinzufügen, sodass Sie eine React-Komponente für das Layout zurückgeben können. Dies ermöglicht es Ihnen, das Layout seitenweise zu definieren. Da wir eine Funktion zurückgeben, können wir bei Bedarf komplexe verschachtelte Layouts erstellen.
Beim Navigieren zwischen Seiten möchten wir den Seitenzustand (Eingabewerte, Scroll-Position usw.) für ein Single-Page-Application (SPA)-Erlebnis beibehalten.
Dieses Layout-Muster ermöglicht die Zustandserhaltung, da der React-Komponentenbaum zwischen Seitenübergängen beibehalten wird. Mit dem Komponentenbaum kann React verstehen, welche Elemente sich geändert haben, um den Zustand zu bewahren.
Hinweis: Dieser Vorgang wird Reconciliation genannt, und so versteht React, welche Elemente sich geändert haben.
Mit TypeScript
Bei Verwendung von TypeScript müssen Sie zunächst einen neuen Typ für Ihre Seiten erstellen, der eine getLayout
-Funktion enthält. Anschließend müssen Sie einen neuen Typ für Ihre AppProps
erstellen, der die Component
-Eigenschaft überschreibt, um den zuvor erstellten Typ zu verwenden.
Datenabruf
In Ihrem Layout können Sie Daten clientseitig mit useEffect
oder einer Bibliothek wie SWR abrufen. Da diese Datei keine Seite ist, können Sie derzeit nicht getStaticProps
oder getServerSideProps
verwenden.