<Form>
Die <Form>
-Komponente erweitert das HTML-<form>
-Element, um Prefetching der Lade-UI, Client-seitige Navigation bei der Übermittlung und progressiven Enhancement bereitzustellen.
Sie ist nützlich für Formulare, die URL-Suchparameter aktualisieren, da sie den Boilerplate-Code reduziert, der benötigt wird, um die oben genannten Funktionen zu erreichen.
Grundlegende Verwendung:
Referenz
Das Verhalten der <Form>
-Komponente hängt davon ab, ob der action
-Prop eine string
oder function
übergeben wird.
- Wenn
action
eine Zeichenkette ist, verhält sich die<Form>
wie ein natives HTML-Formular, das eineGET
-Methode verwendet. Die Formulardaten werden als Suchparameter in die URL codiert, und bei der Übermittlung wird zur angegebenen URL navigiert. Zusätzlich führt Next.js Folgendes aus:- Prefetching des Pfads, wenn das Formular sichtbar wird. Dies lädt gemeinsame Benutzeroberfläche (z.B.
layout.js
undloading.js
) vor und führt zu schnellerer Navigation. - Führt eine Client-seitige Navigation anstelle eines vollständigen Seitenneulades durch, wenn das Formular übermittelt wird. Dabei bleibt die gemeinsame Benutzeroberfläche und der Client-seitige Zustand erhalten.
- Prefetching des Pfads, wenn das Formular sichtbar wird. Dies lädt gemeinsame Benutzeroberfläche (z.B.
- Wenn
action
eine Funktion (Server-Aktion) ist, verhält sich<Form>
wie ein React-Formular und führt die Aktion bei der Formularübermittlung aus.
action
(Zeichenkette) Props
Wenn action
eine Zeichenkette ist, unterstützt die <Form>
-Komponente die folgenden Props:
Prop | Beispiel | Typ | Erforderlich |
---|---|---|---|
action | action="/search" | string (URL oder relativer Pfad) | Ja |
replace | replace={false} | boolean | - |
scroll | scroll={true} | boolean | - |
prefetch | prefetch={true} | boolean | - |
action
: Die URL oder der Pfad, zu dem bei der Formularübermittlung navigiert wird.- Eine leere Zeichenkette
""
navigiert zur gleichen Route mit aktualisierten Suchparametern.
- Eine leere Zeichenkette
replace
: Ersetzt den aktuellen Historienzustand, anstatt einen neuen zum Browser-Verlaufsstapel hinzuzufügen. Standard istfalse
.scroll
: Steuert das Scroll-Verhalten während der Navigation. Standard isttrue
, was bedeutet, dass zur Spitze der neuen Route gescrollt wird und die Scroll-Position für Rückwärts- und Vorwärtsnavigation beibehalten wird.prefetch
: Steuert, ob der Pfad prefetched werden soll, wenn das Formular im Viewport des Benutzers sichtbar wird. Standard isttrue
.
action
(Funktion) Props
Wenn action
eine Funktion ist, unterstützt die <Form>
-Komponente die folgenden Prop:
Prop | Beispiel | Typ | Erforderlich |
---|---|---|---|
action | action={meineAktion} | function (Server-Aktion) | Ja |
action
: Die Server-Aktion, die bei der Formularübermittlung aufgerufen wird. Weitere Informationen in den React-Dokumenten.
Hinweis: Wenn
action
eine Funktion ist, werden die Propsreplace
undscroll
ignoriert.
Einschränkungen
formAction
: Kann in<button>
oder<input type="submit">
verwendet werden, um denaction
-Prop zu überschreiben. Next.js führt eine Client-seitige Navigation durch, diese Methode unterstützt jedoch kein Prefetching.- Bei Verwendung von
basePath
müssen Sie es auch imformAction
-Pfad einschließen, z.B.formAction="/base-path/search"
.
- Bei Verwendung von
key
: Das Übergeben eineskey
-Props an eine Zeichenketten-action
wird nicht unterstützt. Wenn Sie eine erneute Darstellung auslösen oder eine Mutation durchführen möchten, verwenden Sie stattdessen eine Funktions-action
.
onSubmit
: Kann verwendet werden, um die Logik zur Formulareinreichung zu handhaben. Wenn jedochevent.preventDefault()
aufgerufen wird, überschreibt dies das Verhalten von<Form>
, wie z.B. das Navigieren zur angegebenen URL.method
,encType
,target
: Werden nicht unterstützt, da sie das Verhalten von<Form>
überschreiben.- Entsprechend können
formMethod
,formEncType
undformTarget
verwendet werden, um die Eigenschaftenmethod
,encType
undtarget
zu überschreiben. Die Verwendung dieser Eigenschaften greift auf das native Browserverhalten zurück. - Wenn Sie diese Eigenschaften verwenden müssen, nutzen Sie stattdessen das HTML-Element
<form>
.
- Entsprechend können
<input type="file">
: Bei Verwendung dieses Eingabetyps, wennaction
eine Zeichenfolge ist, entspricht das Verhalten dem des Browsers, indem der Dateiname anstelle des Dateiobjekts übermittelt wird.
Beispiele
Suchformular, das zu einer Suchergebnisseite führt
Sie können ein Suchformular erstellen, das zu einer Suchergebnisseite navigiert, indem Sie den Pfad als action
übergeben:
Wenn der Benutzer das Abfrageeingabefeld aktualisiert und das Formular absendet, werden die Formulardaten als Suchparameter in die URL kodiert, z.B. /search?query=abc
.
Hinweis: Wenn Sie einen leeren String
""
anaction
übergeben, navigiert das Formular zur gleichen Route mit aktualisierten Suchparametern.
Auf der Ergebnisseite können Sie die Abfrage mithilfe der searchParams
page.js
-Eigenschaft abrufen und zur Datenabfrage aus einer externen Quelle verwenden.
Wenn <Form>
im Sichtfeld des Benutzers sichtbar wird, werden gemeinsame Benutzeroberflächen (wie layout.js
und loading.js
) auf der /search
-Seite vorab abgerufen. Bei der Übermittlung navigiert das Formular sofort zur neuen Route und zeigt die Ladebenutzeroberfläche an, während die Ergebnisse abgerufen werden. Sie können die Fallback-Benutzeroberfläche mit loading.js
gestalten:
Um Fälle abzudecken, in denen die gemeinsame Benutzeroberfläche noch nicht geladen wurde, können Sie dem Benutzer sofortiges Feedback geben, indem Sie useFormStatus
verwenden.
Erstellen Sie zunächst eine Komponente, die einen Ladezustand anzeigt, wenn das Formular in Bearbeitung ist:
Aktualisieren Sie dann die Suchformularseite, um die SearchButton
-Komponente zu verwenden:
Mutationen mit Server-Aktionen
Sie können Mutationen durchführen, indem Sie eine Funktion an die action
-Eigenschaft übergeben.
Nach einer Mutation ist es üblich, zur neuen Ressource weiterzuleiten. Sie können die Funktion redirect
aus next/navigation
verwenden, um zur neuen Beitragsseite zu navigieren.
Hinweis: Da das "Ziel" der Formularübermittlung erst nach Ausführung der Aktion bekannt ist, kann
<Form>
die gemeinsame Benutzeroberfläche nicht automatisch vorab abrufen.
Dann können Sie auf der neuen Seite Daten mithilfe der params
-Eigenschaft abrufen:
Weitere Beispiele finden Sie in der Dokumentation zu Server-Aktionen.