前端UI组件【免费下载链接】rsuite A suite of React components .项目地址https://gitcode.com/gh_mirrors/rs/rsuite点击查看免费下载本文是一份以 React Suite 官方文档中 Formik 集成指南为主体的实战教程。React Suite 提供了一套完整的数据录入Data Entry组件与表单布局组件而 Formik 负责表单状态、校验与提交逻辑——两者结合可以快速搭建体验一致、逻辑清晰的表单。读完本文你将掌握使用useFormik驱动Input、DatePicker、Rate等 React Suite 组件并学会通过手写validate函数或 Yup 模式来构建表单校验。为什么选择 Formik React Suite 的组合React Suite 的表单体系Form、Form.Control等本身自带受控状态与校验能力但当你需要更细粒度的状态控制、与第三方校验库如 Yup、Zod深度集成或希望把表单状态逻辑抽离到组件外部时Formik 是一个成熟的选择。从文档的定位看这种组合方式遵循一个简单原则表单的状态与校验交给 Formik渲染交给 React Suite。你只需要用useFormik维护values、errors、handleSubmit等状态把 Formik 的值通过value属性传给 React Suite 组件用formik.setFieldValue接收 React Suite 组件回调出的新值。React Suite 文档中为这一集成专门提供了沙盒依赖配置见 docs/pages/components/form-formik/index.tsx其中声明的版本为formik ^2.4.5与yup ^1.3.3可作为你新建项目时的版本参考。快速上手useFormik Input这是整个集成方式的最小骨架。官方文档usage.md给出的示例用Input组件创建一个简单的名称输入表单import { useFormik } from formik; import { Input, Button } from rsuite; const App () { const formik useFormik({ initialValues: { name: }, onSubmit: values { console.log(values); } }); return ( form onSubmit{formik.handleSubmit} Input namename value{formik.values.name} onChange{value { formik.setFieldValue(name, value); }} / Button typesubmitSubmit/Button /form ); };这段代码的三个关键点handleSubmit挂在原生form上useFormik返回的handleSubmit会阻止浏览器默认提交行为并在校验通过后触发你在配置中传入的onSubmit回调。注意这里用的是原生form而不是 React Suite 的Form组件——两种方式在后续示例中都会出现。值写入用setFieldValueReact Suite 的Input在onChange回调中直接传出新值字符串而不是原生事件对象。因此要把这个值写回 Formik正确的做法是onChange{value formik.setFieldValue(name, value)}。这也解释了为什么不能直接复用 Formik 默认的handleChange——两者的回调签名不一致。name属性保持一致namename用于标识字段方便在values、errors、touched中按字段名取用。基础实例多字段表单与 VStack 布局在只有一个字段的基础上官方文档的基础实例扩展为name与email两个字段并用 React Suite 的VStack组件做纵向布局import { useFormik } from formik; import { Input, Button, Stack } from rsuite; const App () { const formik useFormik({ initialValues: { name: , email: }, onSubmit: values { alert(JSON.stringify(values, null, 2)); } }); return ( form onSubmit{formik.handleSubmit} VStack spacing{10} Input namename placeholderName value{formik.values.name} onChange{value { formik.setFieldValue(name, value); }} / Input nameemail placeholderEmail value{formik.values.email} onChange{value { formik.setFieldValue(email, value); }} / Button appearanceprimary typesubmit Submit /Button /VStack /form ); };这里引入的VStack是 React Suite 的垂直排列布局组件spacing{10}控制子元素之间的间距Button使用appearanceprimary渲染为主题色实心按钮typesubmit使其成为表单的提交按钮。表单验证手写 validate 函数Formik 原生支持在配置中传入一个validate函数它接收当前的values返回一个errors对象。官方文档的验证示例同时展示了错误信息的展示方式import { useFormik } from formik; import { Input, Button, Form } from rsuite; const Field ({ error, ...rest }) { return ( Form.Group Input {...rest} / Form.ErrorMessage show{!!error} placementbottomStart {error} /Form.ErrorMessage /Form.Group ); }; const App () { const formik useFormik({ initialValues: { name: , email: }, validate: values { const errors {}; if (!values.name) { errors.name Required; } if (!values.email) { errors.email Required; } else if (!/^[A-Z0-9._%-][A-Z0-9.-]\.[A-Z]{2,4}$/i.test(values.email)) { errors.email Invalid email address; } return errors; }, onSubmit: values { alert(JSON.stringify(values, null, 2)); } }); return ( Form onSubmit{formik.handleSubmit} Form.Stack fluid Field namename placeholderName value{formik.values.name} error{formik.errors.name} onChange{value formik.setFieldValue(name, value)} / Field nameemail placeholderEmail value{formik.values.email} error{formik.errors.email} onChange{value formik.setFieldValue(email, value)} / Button appearanceprimary typesubmit Submit /Button /Form.Stack /Form ); };自定义 Field 封装组件的设计示例中定义了一个本地Field组件它把「输入控件 错误信息」打包成标准结构这也是多个示例复用同一套代码的关键Form.GroupReact Suite 中为表单提供结构的布局单元内部通过FormGroupContext传递自动生成的controlId用于关联Form.Control的id与Form.ControlLabel的htmlFor并生成对应的aria-labelledby/aria-describedby见 src/FormGroup/FormGroup.tsx 的useUniqueId(rs-, controlIdProp)逻辑。Form.ErrorMessage错误提示气泡show控制是否显示placementbottomStart指定气泡出现在输入框下方左侧。从 src/FormErrorMessage/FormErrorMessage.tsx 的源码可以看到show为true时才渲染包裹层并通过data-placement与箭头元素呈现带小箭头的提示气泡当show为false时组件返回null完全不占位。Form.Stack fluidForm.Stack是基于 Flexbox 的快捷布局组件见 src/FormStack/FormStack.tsx支持horizontal/vertical/inline三种layoutfluid让表单元素在垂直布局下占满容器宽度。验证触发时机与 errors 传递validate函数在字段值变化、失焦以及提交时都会被 Formik 调用只要返回值中存在某个字段的错误formik.errors中就会携带对应信息。示例通过error{formik.errors.name}把错误传给FieldField再以show{!!error}决定是否渲染Form.ErrorMessage。使用 Yup 进行模式校验当表单校验规则变多时手写validate函数会越来越繁琐。Yup 是用于运行时值解析与校验的模式构建器Formik 对其有内置支持只需传入validationSchema配置项。官方文档的 yup-schema-validation.md 示例与上一节完全等价import { useFormik } from formik; import { Input, Button, Form } from rsuite; import * as Yup from yup; const Field ({ error, ...rest }) { return ( Form.Group Input {...rest} / Form.ErrorMessage show{!!error} placementbottomStart {error} /Form.ErrorMessage /Form.Group ); }; const validationSchema Yup.object().shape({ name: Yup.string().required(Required), email: Yup.string().email(Invalid email address).required(Required) }); const App () { const formik useFormik({ initialValues: { name: , email: }, validationSchema, onSubmit: values { alert(JSON.stringify(values, null, 2)); } }); return ( Form onSubmit{formik.handleSubmit} Form.Stack fluid Field namename placeholderName value{formik.values.name} error{formik.errors.name} onChange{value formik.setFieldValue(name, value)} / Field nameemail placeholderEmail value{formik.values.email} error{formik.errors.email} onChange{value formik.setFieldValue(email, value)} / Button appearanceprimary typesubmit Submit /Button /Form.Stack /Form ); };对比两种校验写法维度手写validate函数validationSchema Yup代码组织校验逻辑内联在useFormik配置中校验规则声明为独立 schema可复用、可测试字段规则逐字段手写 if/elseYup.string().email().required()链式声明适用场景简单表单、依赖业务上下文的自定义逻辑规则较多的表单、与类型定义共享 schema两种方式产出的errors对象结构一致因此Field组件的消费方式完全相同。Zod 偏好者如果你更喜欢使用 Zod可以考虑使用社区提供的适配器 zod-formik-adapter它提供了类似的 schema 桥接能力用法与 Yup 集成接近。其他数据录入组件DatePicker 与 RateReact Suite 中所有数据录入组件都可以与 Formik 组合使用。官方文档的 other-input-components.md 演示了DatePicker与Rate的接入方式其亮点在于把Field扩展为支持as属性——用哪个组件渲染由调用方决定import { useFormik } from formik; import { Input, Button, Form, DatePicker, Rate } from rsuite; import * as Yup from yup; const Field ({ error, as: Component Input, ...rest }) { return ( Form.Group Component {...rest} / Form.ErrorMessage show{!!error} placementbottomStart {error} /Form.ErrorMessage /Form.Group ); }; const validationSchema Yup.object().shape({ date: Yup.date().required(Date is required), rating: Yup.number() .required(Rating is required) .min(2, Rating must be at least 2) .max(5, Rating must be at most 5) }); const App () { const formik useFormik({ initialValues: { date: new Date(), rating: 3 }, validationSchema, onSubmit: values { alert(JSON.stringify(values, null, 2)); } }); return ( Form onSubmit{formik.handleSubmit} Form.Stack fluid Field as{DatePicker} namedate value{formik.values.date} error{formik.errors.date} onChange{value formik.setFieldValue(date, value)} / Field as{Rate} namerating coloryellow value{formik.values.rating} error{formik.errors.rating} onChange{value formik.setFieldValue(rating, value)} / Button appearanceprimary typesubmit Submit /Button /Form.Stack /Form ); };这段示例的进阶点as属性让 Field 通用化const Field ({ error, as: Component Input, ...rest })将传入的组件重命名为Component并渲染默认回退到Input。name、value、error、onChange等剩余属性自动透传给目标组件因此同一个Field可以承载任意数据录入组件。DatePicker的值类型是日期对象initialValues中date的初始值是new Date()Yup 用Yup.date()校验DatePicker的onChange回调传出的同样是日期值直接formik.setFieldValue(date, value)即可写回。Rate是数值型录入rating的初始值是数字3Yup 用Yup.number().min(2).max(5)限制评分区间coloryellow设置星星颜色。这再次印证了集成要点——React Suite 数据录入组件的onChange回调统一直接返回新值与 Formik 的setFieldValue天然契合。从源码看这套写法的底层依据把文档中的写法与 React Suite 源码对照可以更清晰地理解为什么「值由 Formik 管理、渲染交给 React Suite」能成立Form是一个普通的表单容器从 src/Form/Form.tsx 可见FormProps基于原生FormHTMLAttributes扩展并对外暴露onSubmit回调。在 Formik 集成场景中Form onSubmit{formik.handleSubmit}只是复用了 React Suite 的样式化表单容器真正的提交逻辑完全由 Formik 接管。Form.ErrorMessage是纯展示组件src/FormErrorMessage/FormErrorMessage.tsx 中show为false时直接返回null因此可以放心地把formik.errors.xxx始终传给error由组件自行决定是否渲染气泡。Form.Stack提供布局能力src/FormStack/FormStack.tsx 中layout默认为verticalfluid让元素撑满容器宽度配合VStack/Stack可以快速搭出规整的表单版式。集成要点速查回调签名React Suite 数据录入组件的onChange直接回调新值字符串、日期对象或数字统一使用formik.setFieldValue(name, value)写回不要使用 Formik 默认的handleChange。提交formik.handleSubmit同时挂在原生form或 React SuiteForm的onSubmit上均可配置中的onSubmit回调在值合法时收到完整values。错误展示封装一个Field组件把Form.Group、输入组件、Form.ErrorMessageshow{!!error}、placementbottomStart组合起来通过as属性切换具体输入组件即可在任意表单中复用。校验方式简单规则用手写validate函数复杂表单用validationSchema Yupformik ^2.4.5/yup ^1.3.3是文档沙盒验证过的组合偏好 Zod 时可借助社区适配器。可扩展性DatePicker、Rate、Checkbox、InputNumber等所有数据录入组件都遵循同一套valueonChange(value)约定均可套用本文的Field模式。赞分享前端UI组件【免费下载链接】rsuite A suite of React components .项目地址https://gitcode.com/gh_mirrors/rs/rsuite点击查看免费下载相关推荐Formik 与 Material UI 集成实战基于 useFormik 与 Yup 构建带校验的登录表单Formik 与 Material UI 集成实战基于 useFormik 与 Yup 构建带校验的登录表单 本指南以仓库中的 examples/with mRedwood 表单实战用 redwoodjs/forms 构建带校验的 Contact 表单Redwood 表单实战用 redwoodjs/forms 构建带校验的 Contact 表单 本指南以 Redwood 教程第三章的「Building a后端前端Web框架开发工具Formik 与 Material UI 集成实战指南零桥接接入表单状态与校验Formik 与 Material UI 集成实战指南零桥接接入表单状态与校验 Formik 可以极为自然地与 Material UI 组件协同工作只需将上一篇Turborepo插件开发自定义构建任务的完整指南下一篇洛雪音乐音源配置终极指南免费打造全网音乐聚合方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
wordpress+留言本避坑指南 3招搞定WordPress留言本防黑与性能优化实战 昨晚刚睡下,手机突然狂响。客户老板发来一条微信,语气急得像要炸:“网站怎么挂满乱七八糟的广告链接?后台登录不进去,页面全是乱码!”我盯着屏幕,手心冒汗。这场景我太熟悉了,做建站十年,… · 2026/9/27 21:20:22
go-stock 技能管理实战指南:基于 SKILL.md 的渐进式提示词注入机制详解 人工智能大模型AI 应用AI AgentRAG金融科技桌面应用MCP Clients 【免费下载链接】go-stock 🦄🦄🦄AI赋能股票分析:AI加持的股票分析/选股工具。股票行情获取,AI热点资讯分析,AI资金/财务分析,涨… · 2026/9/27 21:20:15
欧美网站特点速查手册 做欧美站没人看?5个核心差异对比评测,省下的钱够买服务器 网站做好了没人访问,这大概是独立站长最头疼的噩梦。很多安徽的兄弟花了几万块把站搭起来,结果流量寥寥无几,连个询盘都等不来。问题出在哪?不是你代码写得烂,也不是SEO做得差,而是你做的… · 2026/9/27 21:20:09
元宝 深度思考 LeetCode 113.路径总和 || Kotlin实现 下面是 LeetCode 113(Path Sum II) 的 Kotlin 实现,代码风格符合 LeetCode 的提交规范,并附带了详细注释。
Kotlin 完整实现(可直接提交)
/**LeetCode 给定的 TreeNode 定义class TreeNode(var val: Int) {… · 2026/9/27 22:32:56
使用AI编写Qt代码-2:用TaoToken统一Key接入Cline的settings.json配置与验证 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:32:56
梁文锋署名,DeepSeek最新公开Agent训练的真正底座:一天撑300万沙箱 「已支撑V3.2到V4.1训练」
目录
01 Agent沙箱 workload 的7个现实硬约束
02 整体架构:集群管控 节点本地运行时
03 三大核心系统机制,解决生产痛点
3.1 可组合分层环境:干掉单体镜像维护噩梦
3.2 高密度资源管理:… · 2026/9/27 22:32:49
9.24【A】 磐久UMX:UALink下一代AliSCM,GPU直连的PCM内存池
PCM
PCM 是 Phase-Change Memory(相变内存)。它用一种特殊材料在两种状态间切换来存数据:结晶态和非晶态的电阻不同,控制器读取电阻就能判断存的是 0 还是… · 2026/9/27 22:32:49
基于MCP协议的招聘推荐系统架构设计与实践:TaoToken统一Key接入配置与验证 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:32:43
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01