一个渐进式增强的 HTML <form>
,它通过 fetch
将数据提交到操作,激活 useNavigation
中的待定状态,从而实现超越基本 HTML <form>
的高级用户界面。表单的 action
完成后,页面上的所有数据都会自动重新验证,以保持 UI 与数据同步。
因为它使用 HTML 表单 API,所以在 JavaScript 加载之前,服务器渲染的页面在基本层面上是可交互的。浏览器会管理提交以及待定状态(例如旋转的网站图标),而不是由 React Router 来管理。JavaScript 加载后,React Router 接管,从而实现 Web 应用程序的用户体验。
Form
最适用于那些也应该改变 URL 或以其他方式向浏览器历史堆栈添加条目的提交。对于不应操作浏览器 History
堆栈的表单,请使用 <fetcher.Form>
。
import { Form } from "react-router";
function NewEvent() {
return (
<Form action="/events" method="post">
<input name="title" type="text" />
<input name="description" type="text" />
</Form>
);
}
用于提交表单数据的 URL。如果为 undefined
,则默认为上下文中最近的路由。
定义链接发现行为。参见 DiscoverBehavior
。
<Link /> // default ("render")
<Link discover="render" />
<Link discover="none" />
用于表单提交的编码类型。
<Form encType="application/x-www-form-urlencoded"/> // Default
<Form encType="multipart/form-data"/>
<Form encType="text/plain"/>
在使用 navigate={false}
时,指示要使用的特定 fetcherKey,这样你就可以在另一个组件的 useFetcher
中获取 fetcher 的状态。
提交表单时使用的 HTTP 动词。支持 "delete"
、"get"
、"patch"
、"post"
和 "put"
。
原生 <form>
仅支持 "get"
和 "post"
,如果您希望支持渐进式增强,请避免使用其他动词
当为 false
时,跳过导航并通过 fetcher 内部提交。这本质上是 useFetcher
+ <fetcher.Form>
的简写,当您不关心此组件中结果数据时使用。
表单提交时要调用的函数。如果您调用 event.preventDefault()
,则此表单将不会执行任何操作。
在使用 <ScrollRestoration>
组件时,防止导航完成后滚动位置重置到视口的顶部
确定表单操作是相对于路由层次结构还是路径名。如果您想选择退出路由层次结构的导航,而是希望基于斜杠分隔的 URL 段进行路由,请使用此选项。参见 RelativeRoutingType
。
强制进行完整的文档导航,而不是客户端路由和数据获取。
当表单导航时,替换浏览器 History
堆栈中的当前条目。如果您不希望用户能够点击“返回”按钮回到带有表单的页面,请使用此选项。
要添加到此导航的 History
堆栈条目的状态对象
为此导航启用 视图过渡。要在过渡期间应用特定样式,请参见 useViewTransitionState
。