🎙 欢迎来到《前端达人 · 播客书单》第 24 期。
今天我们聚焦前端开发中最常见的“表单处理”问题,从 React Router 的 <Form>
组件讲起,再深入原生 HTML 表单验证的本事和局限,为你打下强健的表单基础。
开发中,我们常见这样几个场景:
onSubmit + e.preventDefault()
?这些痛点,其实都是因为你还没有系统掌握 React Router 的 <Form>
和 HTML 的原生验证能力。
今天我们就来拆解两个关键问题:
<Form>
?一句话通俗解释:
<Form>
是 React Router 提供的表单封装组件,它让你不用 JS 也能把表单提交交给路由处理逻辑。
e.preventDefault()
了)action
函数处理<Form>
?你只需要这样写 👇
import { Form } from 'react-router-dom';
function ContactPage() {
return (
<Form method="post" action="/thank-you-page">
<input type="text" name="userName" />
<button type="submit">提交</button>
</Form>
);
}
🧠 小提示:
action
可以省略,默认提交到当前路由method
默认是 "get"
,你也可以改成 "post"
action
告诉你!表单提交后,数据会被送到你配置在路由里的 action
函数中 👇
export async function contactPageAction({ request }: ActionFunctionArgs) {
const formData = await request.formData();
const userName = formData.get('userName') as string;
return redirect(`/thank-you/${userName}`);
}
这像不像服务端的 POST 处理器? 但这次,一切都发生在 React Router 的客户端逻辑里。
你甚至可以这样配置路由 👇
const router = createBrowserRouter([
{
path: '/contact',
element: <ContactPage />,
action: contactPageAction,
},
{
path: '/thank-you/:name',
element: <ThankYouPage />,
},
]);
📦
action
函数让你把表单逻辑模块化、集中化,再也不用到处加useState
管理表单状态了。
HTML5 提供了许多内置验证手段,无需 JS 就能搞定很多常见规则 👇
<input type="text" name="name" required />
<input type="email" name="email" required pattern="\S+@\S+\.\S+" />
🔍 常见属性说明:
required
: 强制必须填写type="email"
: 自动检查邮箱格式pattern
: 用正则表达式自定义格式💡 这也是为啥很多团队最后还是选择用 React Hook Form
或 Formik
。
📌 今天我们学了两个关键组件:
React Router <Form>
:让前端提交逻辑模块化、自动接入路由逻辑HTML 原生验证
:快速表单校验首选,适合简单场景🧭 但面对更复杂的表单场景(比如:多字段联动、异步验证、错误提示统一管理),我们需要更强的工具 —— 明天的主角:
👉 React Hook Form:真正的表单管家!
如果你觉得这节播客有帮助,不妨点个【收藏】或【转发】,让更多同学写出更优雅的表单体验 💙
#React #React播客 #前端播客 #前端达人 #TypeScript