Formular
Die <Form>
-Komponente erweitert das HTML-<form>
-Element, um Prefetching von Lade-UI, clientseitige Navigation bei Übermittlung und progressive Verbesserung bereitzustellen.
Sie ist nützlich für Formulare, die URL-Suchparameter aktualisieren, da sie den Boilerplate-Code reduziert, der für die oben genannten Funktionen benötigt wird.
Grundlegende Verwendung:
Referenz
Das Verhalten der <Form>
-Komponente hängt davon ab, ob die action
-Prop einen string
oder eine function
erhält.
- Wenn
action
ein String ist, verhält sich<Form>
wie ein natives HTML-Formular, das eineGET
-Methode verwendet. Die Formulardaten werden als Suchparameter in die URL kodiert, und bei Übermittlung des Formulars wird zur angegebenen URL navigiert. Zusätzlich führt Next.js folgendes aus:- Prefetching des Pfads, wenn das Formular sichtbar wird. Dies lädt die gemeinsame UI (z.B.
layout.js
undloading.js
) vor, was zu schnellerer Navigation führt. - Führt eine clientseitige Navigation anstelle eines vollständigen Seitenneuladens durch, wenn das Formular übermittelt wird. Dies erhält die gemeinsame UI und den clientseitigen Zustand.
- Prefetching des Pfads, wenn das Formular sichtbar wird. Dies lädt die gemeinsame UI (z.B.
- Wenn
action
eine Funktion (Server Action) ist, verhält sich<Form>
wie ein React-Formular und führt die Aktion bei Übermittlung des Formulars aus.
action
(string) Props
Wenn action
ein String ist, unterstützt die <Form>
-Komponente folgende 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 Übermittlung des Formulars navigiert werden soll.- Ein leerer String
""
navigiert zur gleichen Route mit aktualisierten Suchparametern.
- Ein leerer String
replace
: Ersetzt den aktuellen Verlaufseintrag anstatt einen neuen zum Browserverlauf hinzuzufügen. Standard istfalse
.scroll
: Steuert das Scrollverhalten während der Navigation. Standard isttrue
, was bedeutet, dass zur Oberseite der neuen Route gescrollt wird und die Scrollposition für Vor- und Zurück-Navigation beibehalten wird.prefetch
: Steuert, ob der Pfad vorab geladen werden soll, wenn das Formular im sichtbaren Bereich des Benutzers erscheint. Standard isttrue
.
action
(function) Props
Wenn action
eine Funktion ist, unterstützt die <Form>
-Komponente folgende Prop:
Prop | Beispiel | Typ | Erforderlich |
---|---|---|---|
action | action={myAction} | function (Server Action) | Ja |
action
: Die Server Action, die bei Übermittlung des Formulars aufgerufen wird. Weitere Informationen finden Sie in den React-Dokumenten.
Gut zu wissen: Wenn
action
eine Funktion ist, werden diereplace
- undscroll
-Props ignoriert.
Einschränkungen
formAction
: Kann in einem<button>
- oder<input type="submit">
-Feld verwendet werden, um dieaction
-Prop zu überschreiben. Next.js führt eine clientseitige Navigation durch, aber dieser Ansatz unterstützt kein Prefetching.- Bei Verwendung von
basePath
muss dieser auch imformAction
-Pfad enthalten sein, z.B.formAction="/base-path/search"
.
- Bei Verwendung von
key
: Das Übergeben einerkey
-Prop an eine String-action
wird nicht unterstützt. Wenn Sie ein erneutes Rendern auslösen oder eine Mutation durchführen möchten, sollten Sie stattdessen eine Funktions-action
verwenden.
onSubmit
: Kann zur Handhabung der Formularübermittlungslogik verwendet werden. Der Aufruf vonevent.preventDefault()
überschreibt jedoch das<Form>
-Verhalten, z.B. die Navigation zur angegebenen URL.method
,encType
,target
: Werden nicht unterstützt, da sie das<Form>
-Verhalten überschreiben.- Ebenso können
formMethod
,formEncType
undformTarget
verwendet werden, um diemethod
-,encType
- bzw.target
-Props zu überschreiben, und ihre Verwendung führt zum Standardverhalten des Browsers. - Wenn Sie diese Props benötigen, verwenden Sie stattdessen das HTML-
<form>
-Element.
- Ebenso können
<input type="file">
: Die Verwendung dieses Eingabetyps, wennaction
ein String ist, entspricht dem Browserverhalten, 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 Abfrage-Eingabefeld aktualisiert und das Formular übermittelt, werden die Formulardaten als Suchparameter in die URL kodiert, z.B. /search?query=abc
.
Gut zu wissen: Wenn Sie einen leeren String
""
anaction
übergeben, navigiert das Formular zur gleichen Route mit aktualisierten Suchparametern.
Auf der Ergebnisseite können Sie die Abfrage mit der searchParams
-Prop von page.js
abrufen und verwenden, um Daten aus einer externen Quelle abzurufen.
Wenn die <Form>
im sichtbaren Bereich des Benutzers erscheint, wird die gemeinsame UI (wie layout.js
und loading.js
) auf der /search
-Seite vorab geladen. Bei Übermittlung navigiert das Formular sofort zur neuen Route und zeigt die Lade-UI an, während die Ergebnisse abgerufen werden. Sie können die Fallback-UI mit loading.js
gestalten:
Um Fälle abzudecken, in denen die gemeinsame UI noch nicht geladen ist, können Sie dem Benutzer mit useFormStatus
sofortiges Feedback geben.
Erstellen Sie zunächst eine Komponente, die einen Ladezustand anzeigt, wenn das Formular aussteht:
Aktualisieren Sie dann die Suchformularseite, um die SearchButton
-Komponente zu verwenden:
Mutationen mit Server Actions
Sie können Mutationen durchführen, indem Sie eine Funktion an die action
-Prop übergeben.
Nach einer Mutation ist es üblich, zur neuen Ressource umzuleiten. Sie können die redirect
-Funktion von next/navigation
verwenden, um zur neuen Beitragsseite zu navigieren.
Gut zu wissen: Da das "Ziel" der Formularübermittlung erst nach Ausführung der Aktion bekannt ist, kann
<Form>
die gemeinsame UI nicht automatisch vorab laden.
Dann können Sie auf der neuen Seite Daten mit der params
-Prop abrufen:
Weitere Beispiele finden Sie in den Server Actions-Dokumenten.