SuperAPI AI 工具集

forms-validation

前端与建站

查看项目

更新于 10-16 04:05

技能介绍

用途

该技能面向使用 MUI(Material UI)构建 React 表单的开发者,提供表单模式与校验的实践参考,包括受控/非受控写法、错误提示、校验库集成、动态字段、多步骤表单与无障碍处理。

主要能力

受控与非受控模式

  • 受控模式(推荐用于多数场景):状态保存在 React 中,每次按键触发重渲染,适合中小型表单。示例使用 useState 管理 name、email、error,提交时校验 email 是否包含 @,错误通过 TextField 的 error 与 helperText 展示。
  • 非受控模式(配合 ref):适合超大表单或与非 React 代码集成,使用 useRef 获取 inputRef 的值。

TextField 错误与辅助文本

  • error 标志使标签与边框变红,helperText 在下方显示消息。
  • 可在 helperText 中实现字符计数器,例如 helperText={${bio.length}/200},并通过 FormHelperTextProps 设置右对齐。

FormControl / FormLabel / FormHelperText(非 TextField 场景)

用于自定义输入,如复选框组、单选组。示例展示通知偏好设置:使用 FormControl(component="fieldset")、FormLabel(component="legend")、FormGroup、FormControlLabel、Checkbox、FormHelperText,并校验至少选择一项。

React Hook Form + MUI

推荐用于复杂表单。使用 Controller 组件与 MUI 受控输入集成,避免直接把 register() 展开到 MUI 输入上。示例结合 zodResolver 与 zod schema,覆盖 TextField、Select、Autocomplete(多选)、Checkbox,并使用 LoadingButton 显示提交状态。

useFieldArray 动态列表

通过 useFieldArray 获取 fields、append、remove,渲染可增删的字段行,每行使用 Controller 绑定 items.${index}.value。

Formik + MUI 集成

使用 Formik、Form 与 Yup 校验 schema,示例包含 name、email、age 字段,通过 touched 与 errors 控制 error 与 helperText,提交时使用 setSubmitting。

多步骤表单与 Stepper

使用 Stepper、Step、StepLabel 构建多步骤表单,示例包含 Personal info、Address、Review 三步,通过 activeStep 状态与 handleNext/handleBack 切换,最后展示完成状态。

表单无障碍

  • 标签使用 htmlFor 或 TextField 的 label 属性。
  • 相关字段用 fieldset + legend 分组。
  • 通过 aria-describedby、aria-invalid 向屏幕阅读器播报校验错误,错误消息使用 role="alert"。
  • 在 form 上使用 noValidate 抑制浏览器原生校验气泡。

React Hook Form + Zod(现代方案)

推荐现代方案:类型安全、重渲染少。安装命令:

npm install react-hook-form @hookform/resolvers zod

完整示例包含 userSchema(name、email、role、age、bio、password、confirmPassword,并使用 refine 校验两次密码一致),通过 useForm 与 zodResolver 集成,使用 Controller 渲染 TextField、Select 等。

使用方式

资料以代码示例形式给出各类模式,开发者可按需复制对应片段到 React + MUI 项目中,并根据实际表单结构调整字段与校验规则。

适用场景

  • 使用 MUI 构建的 React 表单。
  • 需要受控/非受控选择、错误提示、字符计数。
  • 需要与 React Hook Form、Zod、Formik、Yup 等校验库集成。
  • 需要动态字段列表、多步骤表单。
  • 需要满足表单无障碍要求。

限制

资料未提供该技能的安装方式、版本要求、收费信息、平台支持范围或效果说明,这些内容暂未提供。