表单
<Form> 组件扩展了 HTML <form> 元素,提供了 提交时的客户端导航以及渐进式增强。
它对于更新 URL 搜索参数的表单非常有用,因为它减少了实现上述功能所需的样板代码。
基本用法:
/ui/search.js
TypeScript
import Form from 'next/form'
export default function Page() {
return (
<Form action="/search">
{/* 提交时,输入值将被追加到 URL 中,
例如 /search?query=abc */}
<input name="query" />
<button type="submit">提交</button>
</Form>
)
}参考
<Form> 组件的行为取决于 action prop 传递的是 string 还是 function。
- 当
action是字符串时,<Form>的行为类似于使用GET方法的原生 HTML 表单。表单数据会被编码为 URL 中的搜索参数,当表单提交时,它会导航到指定的 URL。此外,Next.js 会:- 在表单提交时执行客户端导航而不是完整的页面重新加载。这会保留共享 UI 和客户端状态。
action(字符串)Props
当 action 是字符串时,<Form> 组件支持以下 props:
| Prop | 示例 | 类型 | 必需 |
|---|---|---|---|
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可以分别用于覆盖method、encType和targetprops,使用它们将回退到原生浏览器行为。 - 如果你需要使用这些 props,请使用 HTML
<form>元素。
- 同样,
<input type="file">:当action是字符串时使用此输入类型将匹配浏览器行为,提交文件名而不是文件对象。