Verlinkung und Navigation
Der Next.js-Router ermöglicht clientseitige Routenübergänge zwischen Seiten, ähnlich wie bei einer Single-Page-Anwendung.
Eine React-Komponente namens Link
wird bereitgestellt, um diesen clientseitigen Routenübergang durchzuführen.
Das obige Beispiel verwendet mehrere Links. Jeder davon ordnet einen Pfad (href
) einer bekannten Seite zu:
/
→pages/index.js
/about
→pages/about.js
/blog/hello-world
→pages/blog/[slug].js
Jeder <Link />
im Viewport (initial oder durch Scrollen) wird standardmäßig vorab abgerufen (inklusive der entsprechenden Daten) für Seiten, die Statische Generierung verwenden. Die entsprechenden Daten für server-seitig gerenderte Routen werden erst dann abgerufen, wenn der <Link />
angeklickt wird.
Verlinkung zu dynamischen Pfaden
Sie können auch Interpolation verwenden, um den Pfad zu erstellen, was bei dynamischen Routensegmenten nützlich ist. Zum Beispiel, um eine Liste von Beiträgen anzuzeigen, die als Prop an die Komponente übergeben wurden:
encodeURIComponent
wird im Beispiel verwendet, um den Pfad utf-8-kompatibel zu halten.
Alternativ können Sie ein URL-Objekt verwenden:
Hier verwenden wir anstelle der Interpolation ein URL-Objekt in href
, wobei:
pathname
der Name der Seite impages
-Verzeichnis ist. In diesem Fall/blog/[slug]
.query
ein Objekt mit dem dynamischen Segment ist. In diesem Fallslug
.
Router einbinden
Um auf das router
-Objekt in einer React-Komponente zuzugreifen, können Sie useRouter
oder withRouter
verwenden.
Generell empfehlen wir die Verwendung von useRouter
.
Imperative Navigation
next/link
sollte die meisten Ihrer Routing-Anforderungen abdecken, aber Sie können auch clientseitige Navigationen ohne ihn durchführen. Siehe die Dokumentation für next/router
.
Das folgende Beispiel zeigt, wie Sie grundlegende Seitennavigationen mit useRouter
durchführen:
Shallow Routing
Beispiele
Shallow Routing ermöglicht es Ihnen, die URL zu ändern, ohne die Datenabrufmethoden erneut auszuführen. Dazu gehören getServerSideProps
, getStaticProps
und getInitialProps
.
Sie erhalten den aktualisierten pathname
und das query
-Objekt über das router
-Objekt (hinzugefügt durch useRouter
oder withRouter
), ohne den Zustand zu verlieren.
Um Shallow Routing zu aktivieren, setzen Sie die Option shallow
auf true
. Betrachten Sie das folgende Beispiel:
Die URL wird auf /?counter=10
aktualisiert und die Seite wird nicht ersetzt, nur der Zustand der Route ändert sich.
Sie können URL-Änderungen auch über componentDidUpdate
überwachen, wie unten gezeigt:
Einschränkungen
Shallow Routing funktioniert nur für URL-Änderungen auf der aktuellen Seite. Nehmen wir zum Beispiel an, wir haben eine weitere Seite namens pages/about.js
, und Sie führen dies aus:
Da dies eine neue Seite ist, wird die aktuelle Seite entladen, die neue geladen und auf den Datenabruf gewartet, auch wenn wir Shallow Routing angefordert haben.
Wenn Shallow Routing mit Middleware verwendet wird, wird nicht sichergestellt, dass die neue Seite mit der aktuellen Seite übereinstimmt, wie es zuvor ohne Middleware der Fall war. Dies liegt daran, dass Middleware dynamisch umschreiben kann und clientseitig ohne Datenabruf nicht überprüft werden kann, der bei Shallow Routing übersprungen wird. Daher muss eine Shallow-Route-Änderung immer als Shallow behandelt werden.
Dynamische Routen
Dynamische Routen sind Seiten, die es Ihnen ermöglichen, benutzerdefinierte Parameter zu Ihren URLs hinzuzufügen. Erfahren Sie hier, wie Sie Dynamische Routen erstellen.
Benutzerdefinierte App
Steuern Sie die Seiteninitialisierung und fügen Sie ein Layout hinzu, das für alle Seiten beibehalten wird, indem Sie die standardmäßige App-Komponente von Next.js überschreiben.