<Link>
<Link>
ist eine React-Komponente, die das HTML-Element <a>
erweitert, um Prefetching und clientseitige Navigation zwischen Routen zu ermöglichen. Es ist der primäre Weg, um zwischen Routen in Next.js zu navigieren.
Grundlegende Verwendung:
Referenz
Der <Link>
-Komponente können folgende Props übergeben werden:
Prop | Beispiel | Typ | Erforderlich |
---|---|---|---|
href | href="/dashboard" | String oder Objekt | Ja |
replace | replace={false} | Boolean | - |
scroll | scroll={false} | Boolean | - |
prefetch | prefetch={false} | Boolean | - |
legacyBehavior | legacyBehavior={true} | Boolean | - |
passHref | passHref={true} | Boolean | - |
shallow | shallow={false} | Boolean | - |
locale | locale="fr" | String oder Boolean | - |
Hinweis:
<a>
-Tag-Attribute wieclassName
odertarget="_blank"
können<Link>
als Props hinzugefügt werden und werden an das zugrunde liegende<a>
-Element weitergegeben.
href
(erforderlich)
Der Pfad oder die URL, zu der navigiert werden soll.
replace
Standardmäßig false
. Wenn true
, ersetzt next/link
den aktuellen Verlaufszustand, anstatt eine neue URL in den Browsing-Verlauf hinzuzufügen.
scroll
Standardmäßig true
. Das standardmäßige Scroll-Verhalten von <Link>
in Next.js ist die Beibehaltung der Scroll-Position, ähnlich wie Browser Back- und Forward-Navigation handhaben. Beim Navigieren zu einer neuen Seite bleibt die Scroll-Position gleich, solange die Seite im Viewport sichtbar ist. Wenn die Seite jedoch nicht im Viewport sichtbar ist, scrollt Next.js zum Anfang des ersten Seitenelements.
Wenn scroll = {false}
, wird Next.js nicht versuchen, zum ersten Seitenelement zu scrollen.
prefetch
Das Prefetching erfolgt, wenn eine <Link />
Komponente den Viewport des Benutzers betritt (initial oder durch Scrollen). Next.js lädt die verknüpfte Route (gekennzeichnet durch href
) und die Daten im Hintergrund, um die Leistung der clientseitigen Navigation zu verbessern. Prefetching ist nur in der Produktionsumgebung aktiviert.
Die folgenden Werte können an die prefetch
-Eigenschaft übergeben werden:
true
(Standard): Die vollständige Route und ihre Daten werden prefetcht.false
: Prefetching erfolgt nicht beim Betreten des Viewports, sondern beim Hovern. Wenn Sie das Prefetching beim Hovern komplett deaktivieren möchten, verwenden Sie ein<a>
Tag oder migrieren Sie schrittweise zum App Router, der das Deaktivieren des Hovern-Prefetchings ermöglicht.
legacyBehavior
Ein <a>
-Element ist nicht mehr als Kind von <Link>
erforderlich. Fügen Sie die legacyBehavior
-Eigenschaft hinzu, um das Legacy-Verhalten zu verwenden, oder entfernen Sie das <a>
, um zu aktualisieren. Ein Codemod steht zur automatischen Code-Aktualisierung zur Verfügung.
Hinweis: Wenn
legacyBehavior
nicht auftrue
gesetzt ist, können alleanchor
Tag-Eigenschaften wieclassName
,onClick
usw. ebenfalls annext/link
übergeben werden.
passHref
Zwingt Link
, die href
-Eigenschaft an sein Kind zu senden. Standard ist false
. Weitere Informationen finden Sie im Beispiel zum Übergeben einer Funktionskomponente.
scroll
Nach der Navigation zum Seitenanfang scrollen. Standard ist true
.
shallow
Aktualisiert den Pfad der aktuellen Seite ohne erneutes Ausführen von getStaticProps
, getServerSideProps
oder getInitialProps
. Standard ist false
.
locale
Die aktive Sprache wird automatisch vorangestellt. locale
ermöglicht die Angabe einer anderen Sprache. Bei false
muss href
die Sprache enthalten, da das Standardverhalten deaktiviert ist.
Beispiele
Die folgenden Beispiele zeigen, wie die <Link>
-Komponente in verschiedenen Szenarien verwendet wird.
Mit dynamischen Routensegmenten verlinken
Für dynamische Routensegmente kann es nützlich sein, Template-Literale zu verwenden, um den Pfad des Links zu erstellen.
Zum Beispiel können Sie eine Liste von Links zur dynamischen Route pages/blog/[slug].js
generieren
Wenn das Kind eine benutzerdefinierte Komponente ist, die ein <a>
-Tag umschließt
Wenn das Kind von Link
eine benutzerdefinierte Komponente ist, die ein <a>
-Tag umschließt, müssen Sie passHref
zu Link
hinzufügen. Dies ist notwendig, wenn Sie Bibliotheken wie styled-components verwenden. Ohne dies wird dem <a>
-Tag das href
-Attribut fehlen, was die Zugänglichkeit Ihrer Website beeinträchtigt und die SEO beeinflussen kann. Wenn Sie ESLint verwenden, gibt es eine integrierte Regel next/link-passhref
, um die korrekte Verwendung von passHref
sicherzustellen.
- Bei Verwendung von emotion's JSX-Pragma-Funktion (
@jsx jsx
) müssen SiepassHref
verwenden, selbst wenn Sie ein<a>
-Tag direkt verwenden. - Die Komponente sollte die
onClick
-Eigenschaft unterstützen, um die Navigation korrekt auszulösen.
Verschachtelung einer Funktionskomponente
Wenn das Kind von Link
eine Funktionskomponente ist, müssen Sie zusätzlich zur Verwendung von passHref
und legacyBehavior
die Komponente in React.forwardRef
einwickeln:
Übergeben eines URL-Objekts
Link
kann auch ein URL-Objekt empfangen und formatiert es automatisch zur Erstellung des URL-Strings:
Das obige Beispiel hat einen Link zu:
- Einer vordefinierten Route:
/about?name=test
- Einer dynamischen Route:
/blog/my-post
Sie können jede Eigenschaft wie in der Node.js URL-Modul-Dokumentation definiert verwenden.
Die URL ersetzen statt einen neuen Eintrag hinzuzufügen
Das Standardverhalten der Link
-Komponente besteht darin, eine neue URL in den history
-Stack zu pushen
. Sie können die replace
-Eigenschaft verwenden, um das Hinzufügen eines neuen Eintrags zu verhindern, wie im folgenden Beispiel:
Scrollen zur Seitenspitze deaktivieren
Das Standardverhalten von Link
ist es, zum Seitenanfang zu scrollen. Wenn eine Hash-Kennung definiert ist, scrollt es zur spezifischen ID, wie ein normales <a>
-Tag. Um das Scrollen zum Seitenanfang / zur Hash-Kennung zu verhindern, kann scroll={false}
zu Link
hinzugefügt werden:
Links in Middleware vorprefetchen
Es ist üblich, Middleware für Authentifizierung oder andere Zwecke zu verwenden, bei denen der Benutzer auf eine andere Seite umgeleitet wird. Damit die <Link />
-Komponente Links mit Rewrites über Middleware korrekt vorprefetchen kann, müssen Sie Next.js sowohl die anzuzeigende URL als auch die vorzupfetchende URL mitteilen. Dies ist erforderlich, um unnötige Anfragen an die Middleware zu vermeiden, um die korrekte Route zum Vorprefetchen zu ermitteln.
Wenn Sie beispielsweise eine /dashboard
-Route mit authentifizierten und Besucher-Ansichten bereitstellen möchten, können Sie Folgendes in Ihrer Middleware hinzufügen, um den Benutzer zur richtigen Seite weiterzuleiten:
In diesem Fall würden Sie den folgenden Code in Ihrer <Link />
-Komponente verwenden:
Hinweis: Wenn Sie Dynamische Routen verwenden, müssen Sie Ihre
as
- undhref
-Props anpassen. Wenn Sie beispielsweise eine Dynamische Route wie/dashboard/authed/[user]
haben, die Sie über Middleware anders darstellen möchten, würden Sie Folgendes schreiben:<Link href={{ pathname: '/dashboard/authed/[user]', query: { user: username } }} as="/dashboard/[user]">Profil</Link>
.
Versionshistorie
Version | Änderungen |
---|---|
v13.0.0 | Erfordert keine <a> -Unterkomponente mehr. Ein Codemod ist verfügbar, um Ihre Codebasis zu aktualisieren. |
v10.0.0 | href -Props, die auf eine dynamische Route zeigen, werden automatisch aufgelöst und benötigen keine as -Prop mehr. |
v8.0.0 | Verbesserte Prefetching-Leistung. |
v1.0.0 | next/link eingeführt. |