当前位置: 首页 > news >正文

shadcn之表单

前言

shadcn表单相关的了解,可知道 shadcn 目前推出了3种方式来处理表单(毕竟shadcn只做ui,要想处理好完整表单就涉及到可控、校验等问题):react-hook-form、tanstack、useActionState
image

react-hook-form版本

'use client';// 导入表单验证库
import * as z from 'zod';
// 导入消息提示组件
import { toast } from 'sonner';
// 导入 UI 组件
import { Input } from '@repo/shadcn-comps/input';
import { Button } from '@repo/shadcn-comps/button';
import { Textarea } from '@repo/shadcn-comps/textarea';
import { Field, FieldError, FieldGroup, FieldLabel } from '@repo/shadcn-comps/field';
// 导入表单处理相关
import { zodResolver } from '@hookform/resolvers/zod';
import { Controller, useForm } from 'react-hook-form';// 定义表单验证规则
const formSchema = z.object({title: z.string().min(5, '标题至少需要5个字符。').max(32, '标题最多32个字符。'),description: z.string().min(10, '描述至少需要10个字符。').max(30, '描述最多30个字符。'),
});/*** 问题反馈表单组件* 使用 react-hook-form 进行表单管理,zod 进行表单验证*/
export default function BugReportForm() {// 初始化表单,配置验证器和默认值const form = useForm<z.infer<typeof formSchema>>({resolver: zodResolver(formSchema), // 使用 zod 验证器defaultValues: {title: '',description: '',},});// 表单提交处理函数function onSubmit(data: z.infer<typeof formSchema>) {toast.info(JSON.stringify(data, null, 2));}return (<div className="p-2 w-100">{/* 表单主体 */}<form id="form-rhf-demo" onSubmit={form.handleSubmit(onSubmit)}><FieldGroup>{/* title字段 - 使用 Controller 包装以集成 react-hook-form */}<Controllername="title"control={form.control}render={({ field, fieldState }) => (<Field data-invalid={fieldState.invalid}><FieldLabel htmlFor="form-rhf-demo-title">标题</FieldLabel><Input {...field} id="form-rhf-demo-title" aria-invalid={fieldState.invalid} placeholder="请输入" />{/* 显示验证错误信息 */}{fieldState.invalid && <FieldError errors={[fieldState.error]} />}</Field>)}/><Controllername="description"control={form.control}render={({ field, fieldState }) => (<Field data-invalid={fieldState.invalid}><FieldLabel htmlFor="form-rhf-demo-description">描述</FieldLabel><Textarea {...field} id="form-rhf-demo-description" placeholder="请输入" rows={6} className="min-h-24 resize-none" />{/* 显示验证错误信息 */}{fieldState.invalid && <FieldError errors={[fieldState.error]} />}</Field>)}/></FieldGroup></form>{/* 操作按钮组 */}<Field orientation="horizontal" className="mt-2"><Button type="button" variant="outline" onClick={() => form.reset()}>重置</Button><Button type="submit" form="form-rhf-demo">提交</Button></Field></div>);
}
http://www.jsqmd.com/news/37008/

相关文章:

  • 2025 年 11 月粘度计厂家推荐排行榜,在线粘度计,旋转粘度计,振动粘度计,实验室旋转粘度计,反应釜在线粘度计公司推荐
  • Numpy - numpy.random.randn()
  • flask: 用Flask-Uploads实现文件上传
  • AI元人文:交织的智慧——应对价值困境的四条路径
  • 光学神经网络
  • 2025 年 11 月疥螨阴虱药剂厂家推荐排行榜,扑灭司林,苯甲酸苄酯,胺氯菊百灭宁,科灭达专业配方高效灭杀方案公司推荐
  • 黑马点评优雅关闭服务
  • 01-03 设计模式 - 导学
  • 35
  • 2025 年 11 月冲压件厂家推荐排行榜,新能源冲压件,光伏冲压件,精密冲压件,异形冲压件,五金冲压件,铝冲压件,汽配冲压件,不锈钢冲压件,家具冲压件公司推荐
  • Day17内容溢出overflow属性
  • 日总结 24
  • 谷歌广告生态指南:AdSense/GAM 接入避坑 + 填充监听 + 问题排查
  • P4511 日程管理
  • 11.10学习总结
  • 新编故事 | 噪音
  • Oracle数据库实例深度解析与实践指南
  • 2025 年 11 月流量计厂家推荐排行榜,热式/模拟式/数字式/高压/高温/耐腐蚀/多气体/4-20mA/RS485/分体式/不锈钢/高精度流量计公司推荐
  • 20232405 2024-2025-1 《网络与系统攻防技术》实验四实验报告
  • 2025 年 11 月聚氨酯厂家推荐排行榜,浇注型聚氨酯,聚氨酯预聚体,聚氨酯胶黏剂,聚氨酯组合料,聚氨酯密封,聚氨酯轮,聚氨酯胶辊,聚氨酯制品公司推荐
  • duckdb比sqlite大多了
  • 20232303 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • 2025 年 11 月氢氧化镁厂家推荐排行榜,矿石氢氧化镁,矿石法氢氧化镁,水镁石氢氧化镁,阻燃剂氢氧化镁,改性氢氧化镁公司推荐
  • 20232415 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • React:使用Tailwind CSS、Streamdown与Ant Design X
  • Day17清除默认样式
  • 2025 年 11 月磨粉机厂家推荐排行榜,雷蒙磨粉机,环辊磨粉机,摆式磨粉机,矿石磨粉机,超细磨粉机,高压磨粉机公司推荐
  • 详细介绍:探究微波消解仪如何创新现代实验室的样品前处理流程
  • 爆肝!Oracle RAC 日常运维命令总结
  • Python 面向对象编程进阶