React Hook Form + Zod:优雅构建 React 表单
最近在浏览 shadcn/ui 的 表单文档 (Forms)。时发现它并没有去造一个全新的表单轮子而是推荐使用两个神仙库React Hook Form 和 Zod。为什么 shadcn/ui 会选择这个组合我使用下来总结有以下几点react-hook-form有极致的性能与状态管理Zod对表单校验规则的全面封装在表单场景中他俩就是天作之合、强强联手1. React Hook Form高性能的表单状态管理React Hook FormRHF是一个轻量、高性能的 React 表单库。它的核心理念是让表单尽可能接近原生 HTML form。相比传统的表单写法const[email,setEmail]useState()const[password,setPassword]useState()受控组件Controlled Components每次输入都会触发整个组件的重渲染。React Hook Form (RHF) 采用了非受控组件的思想用 ref 直接读取表单项的值。React Hook Form 的核心 APIReact Hook Form 的 API 非常少最核心的是以下几个。1 useFormuseForm用于创建表单实例。const{register,handleSubmit,control,reset,watch,formState}useForm()其中register注册字段handleSubmit处理提交control控制复杂组件formState表单状态2 register用于注册input字段它会返回 onChange、onBlur、name 和 ref。你可以直接用解构语法 {…register(‘字段名’)} 绑定到原生 上input {...register(email)} /这行代码实际上会注册字段到表单绑定 value、onChange、ref提交时 React Hook Form 会自动收集数据{email:exampleemail.com}3 handleSubmit处理表单提交。form onSubmit{handleSubmit(onSubmit)}constonSubmit(data){console.log(data)}4 formStateformState用于获取表单状态有errors,isSubmitting,isValid,dirtyFields,touchedFields等状态例如显示表单校验错误信息p{form.formState.errors.email?.message}/p二、Zod类型安全的 schema validation表单校验需要一套规则而 Zod 就是用来定义这些规则的。你只需要定义一次 Zod Schema它就能同时为你提供运行时校验和编译时的类型提示告别重复写 TS 接口和校验逻辑。例如import{z}fromzodconstUserSchemaz.object({name:z.string(),age:z.number(),})UserSchema.parse(data)如果数据不符合 schema就会抛出错误。Zod 常用 API字符串校验z.string()z.string().min(3)z.string().max(20)z.string().email()z.string().url()例如z.string().min(3,Too short)numberz.number().min(0)optionalz.string().optional()enumz.enum([todo,doing,done])objectz.object({title:z.string(),description:z.string()})类型推导z.infertypeof schema是 Zod 最魔法的 API 它可以直接根据你写的 Schema 反向推导出 TypeScript 的 type 或 interface.比如在我的项目中constformSchemaz.object({title:z.string().trim().min(1,Title is required.),description:z.string().trim().optional(),start:z.date().optional(),end:z.date().optional(),}).refine((v){if(!v.start||!v.end)returntrue;returnv.end.getTime()v.start.getTime();},{path:[end],message:End must be after start.,});typeFormDataz.infertypeofformSchema三、一个完整表单示例下面是一个包含“用户名”和“邮箱”的基础表单组件示例:importReactfromreact;import{useForm}fromreact-hook-form;import{z}fromzod;import{zodResolver}fromhookform/resolvers/zod;// 1. 使用 Zod 定义表单的数据模式 (Schema)constformSchemaz.object({username:z.string().min(2,{message:用户名至少需要 2 个字符}),email:z.string().email({message:请输入有效的邮箱地址}),});// 2. 利用 Zod 自动推导 TypeScript 类型typeFormDataz.infertypeofformSchema;exportdefaultfunctionMinimalForm(){// 3. 初始化 React Hook Formconst{register,handleSubmit,formState:{errors},}useFormFormData({resolver:zodResolver(formSchema),// 绑定 Zod 校验规则});// 4. 提交处理函数constonSubmit(data:FormData){console.log(验证通过的数据:,data);};return(form onSubmit{handleSubmit(onSubmit)}style{{display:flex,flexDirection:column,gap:1rem,width:300px}}{/* 用户名输入框 */}divlabel用户名/labelinput{...register(username)}placeholder输入用户名/{errors.usernamep style{{color:red}}{errors.username.message}/p}/div{/* 邮箱输入框 */}divlabel邮箱/labelinput{...register(email)}placeholder输入邮箱/{errors.emailp style{{color:red}}{errors.email.message}/p}/divbutton typesubmit提交/button/form);}总结shadcn/ui推荐这套方案不是没有原因的。React Hook Form 解决了“怎么高效收集和管理状态”的问题而 Zod 解决了“怎么优雅定义规则和类型”的问题。

相关新闻

基于多目标算法的冷热电联供型综合能源系统运行优化 粒子群算法 平台:MATLAB

基于多目标算法的冷热电联供型综合能源系统运行优化 粒子群算法 平台:MATLAB

基于多目标算法的冷热电联供型综合能源系统运行优化 粒子群算法 平台:MATLAB冷热电联供系统玩的就是能源利用效率的最大化。这种系统同时产出冷、热、电能,但怎么分配负荷、调度设备可是个技术活。最近用MATLAB折腾了个粒子群优化方案,发现多…

2026/5/17 10:23:12 阅读更多 →
这次终于选对!全网爆红的AI论文写作软件 —— 千笔AI

这次终于选对!全网爆红的AI论文写作软件 —— 千笔AI

你是否在论文写作中感到力不从心?选题无从下手,框架混乱,文献查找费时费力,查重率高得让人焦虑,格式修改总也对不上?这些困扰让无数学生陷入“论文焦虑”。而如今,一款被全网爆红的AI论文写作软…

2026/7/5 11:01:42 阅读更多 →
基于小波和神经网络的均衡算法及其与传统电话信道模型中神经网络盲均衡算法的Matlab仿真对比

基于小波和神经网络的均衡算法及其与传统电话信道模型中神经网络盲均衡算法的Matlab仿真对比

基于小波和神经网络的均衡算法,matlab仿真程序。 (1)中信道要求多径衰弱信道。 (2)中信道传统电话信道模型,(2)中和神经网络常模盲均衡算法对比。 结果图为均方误差,码间干扰,稳态误差对比图在复杂信道环境里搞信号传输&#xff0…

2026/7/4 13:23:25 阅读更多 →

最新新闻

Subliminal进阶:模拟复杂用户交互和系统对话框的完整指南

Subliminal进阶:模拟复杂用户交互和系统对话框的完整指南

Subliminal进阶:模拟复杂用户交互和系统对话框的完整指南 【免费下载链接】Subliminal An understated approach to iOS integration testing. 项目地址: https://gitcode.com/gh_mirrors/subl/Subliminal Subliminal是一个强大的iOS集成测试框架&#xff0c…

2026/7/5 17:05:07 阅读更多 →
Android分布式架构深度解析:基于空间架构模式的终极实践指南

Android分布式架构深度解析:基于空间架构模式的终极实践指南

Android分布式架构深度解析:基于空间架构模式的终极实践指南 【免费下载链接】android-tech-frontier 【停止维护】一个定期翻译国外Android优质的技术、开源库、软件架构设计、测试等文章的开源项目 项目地址: https://gitcode.com/gh_mirrors/an/android-tech-f…

2026/7/5 17:05:07 阅读更多 →
一套方案跑通三大平台:YOLO全场景部署实战指南,附一键环境配置脚本

一套方案跑通三大平台:YOLO全场景部署实战指南,附一键环境配置脚本

做工业视觉落地的同行应该都有同感:训模型只是第一步,部署才是磨死人的开始。同一份YOLO权重,既要跑Windows产线上位机,又要部署Linux后台服务器,还要塞进Jetson边缘盒子,每个平台环境依赖不一样、推理引擎…

2026/7/5 17:03:07 阅读更多 →
MarkItDown:如何用Python统一处理数十种文档格式

MarkItDown:如何用Python统一处理数十种文档格式

MarkItDown:如何用Python统一处理数十种文档格式 【免费下载链接】markitdown Python tool for converting files and office documents to Markdown. 项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown 想象一下这样的场景:你的桌面…

2026/7/5 17:03:07 阅读更多 →
NVC多平台部署指南:Linux、macOS和Windows下的安装与配置

NVC多平台部署指南:Linux、macOS和Windows下的安装与配置

NVC多平台部署指南:Linux、macOS和Windows下的安装与配置 【免费下载链接】nvc VHDL compiler and simulator 项目地址: https://gitcode.com/gh_mirrors/nv/nvc NVC是一款开源的VHDL编译器和模拟器,支持VHDL-2008标准并具有出色的模拟性能。本指…

2026/7/5 17:03:07 阅读更多 →
3步掌握MinerU:构建智能文档解析系统的实战指南

3步掌握MinerU:构建智能文档解析系统的实战指南

3步掌握MinerU:构建智能文档解析系统的实战指南 【免费下载链接】MinerU Transforms complex documents like PDFs and Office docs into LLM-ready markdown/JSON for your Agentic workflows. 项目地址: https://gitcode.com/GitHub_Trending/mi/MinerU Mi…

2026/7/5 17:03:07 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻