Form
Компонент <Form>
расширяет HTML-элемент <form>
, предоставляя клиентскую навигацию при отправке и прогрессивное улучшение.
Он особенно полезен для форм, обновляющих параметры поиска в URL, так как сокращает количество шаблонного кода.
Базовое использование:
import Form from 'next/form'
export default function Page() {
return (
<Form action="/search">
{/* При отправке значение input будет добавлено к
URL, например /search?query=abc */}
<input name="query" />
<button type="submit">Submit</button>
</Form>
)
}
import Form from 'next/form'
export default function Search() {
return (
<Form action="/search">
{/* При отправке значение input будет добавлено к
URL, например /search?query=abc */}
<input name="query" />
<button type="submit">Submit</button>
</Form>
)
}
Справочник
Поведение компонента <Form>
зависит от того, передается ли в проп action
строка (string
) или функция (function
).
- Когда
action
— это строка,<Form>
ведет себя как нативная HTML-форма с методомGET
. Данные формы кодируются в URL как параметры поиска, и при отправке формы происходит переход по указанному URL. Дополнительно Next.js:- Выполняет клиентскую навигацию вместо полной перезагрузки страницы, сохраняя общий UI и клиентское состояние.
Пропсы action
(string)
Когда action
— это строка, компонент <Form>
поддерживает следующие пропсы:
Пропс | Пример | Тип | Обязательный |
---|---|---|---|
action | action="/search" | string (URL или относительный путь) | Да |
replace | replace={false} | boolean | - |
scroll | scroll={true} | boolean | - |
action
: URL или путь для перехода при отправке формы.- Пустая строка
""
перейдет на тот же маршрут с обновленными параметрами поиска.
- Пустая строка
replace
: Заменяет текущее состояние истории вместо добавления нового в стек истории браузера. По умолчаниюfalse
.scroll
: Управляет поведением прокрутки при навигации. По умолчаниюtrue
— прокручивает к верху нового маршрута и сохраняет позицию прокрутки при навигации назад/вперед.
Ограничения
onSubmit
: Может использоваться для обработки логики отправки формы. Однако вызовevent.preventDefault()
переопределит поведение<Form>
, например переход по указанному URL.method
,encType
,target
: Не поддерживаются, так как переопределяют поведение<Form>
.- Аналогично,
formMethod
,formEncType
иformTarget
могут использоваться для переопределения соответствующих пропсов, но их использование приведет к нативному поведению браузера. - Если эти пропсы необходимы, используйте HTML-элемент
<form>
.
- Аналогично,
<input type="file">
: Использование этого типа input при строковомaction
приведет к поведению браузера по умолчанию — отправке имени файла вместо объекта файла.