表单
本页内容

表单

摘要

参考文档 ↗

一个渐进式增强的 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>
  );
}

属性

action

用于提交表单数据的 URL。如果为 undefined,则默认为上下文中最近的路由。

discover

定义链接发现行为。参见 DiscoverBehavior

<Link /> // default ("render")
<Link discover="render" />
<Link discover="none" />
  • render — 默认值,在链接渲染时发现路由
  • none — 不主动发现,仅在点击链接时发现

encType

用于表单提交的编码类型。

<Form encType="application/x-www-form-urlencoded"/>  // Default
<Form encType="multipart/form-data"/>
<Form encType="text/plain"/>

fetcherKey

在使用 navigate={false} 时,指示要使用的特定 fetcherKey,这样你就可以在另一个组件的 useFetcher 中获取 fetcher 的状态。

method

提交表单时使用的 HTTP 动词。支持 "delete""get""patch""post""put"

原生 <form> 仅支持 "get""post",如果您希望支持渐进式增强,请避免使用其他动词

当为 false 时,跳过导航并通过 fetcher 内部提交。这本质上是 useFetcher + <fetcher.Form> 的简写,当您不关心此组件中结果数据时使用。

onSubmit

表单提交时要调用的函数。如果您调用 event.preventDefault(),则此表单将不会执行任何操作。

preventScrollReset

在使用 <ScrollRestoration> 组件时,防止导航完成后滚动位置重置到视口的顶部

relative

确定表单操作是相对于路由层次结构还是路径名。如果您想选择退出路由层次结构的导航,而是希望基于斜杠分隔的 URL 段进行路由,请使用此选项。参见 RelativeRoutingType

reloadDocument

强制进行完整的文档导航,而不是客户端路由和数据获取。

replace

当表单导航时,替换浏览器 History 堆栈中的当前条目。如果您不希望用户能够点击“返回”按钮回到带有表单的页面,请使用此选项。

state

要添加到此导航的 History 堆栈条目的状态对象

viewTransition

为此导航启用 视图过渡。要在过渡期间应用特定样式,请参见 useViewTransitionState

文档和示例 CC 4.0
编辑