关于 react-hook-form
react-hook-form 是用于构建、审查和重构 React Hook Form 应用的参考技能。它围绕性能整理了 41 条分级规则,涵盖配置、订阅、受控组件、验证、字段数组和状态管理。
主要功能
- 0141 条分级 React Hook Form 规则
- 02涵盖八类规则的指导
- 03表单配置与验证实践
- 04订阅和字段数组模式
- 05UI 库集成建议
适用场景
- 01使用 React Hook Form 构建表单
- 02排查表单性能问题
- 03重构字段订阅与状态处理
- 04接入受控 UI 组件
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ thongdn-it/ react-agent-skills --skill react-hook-form安装后在 Claude Code 中输入/react-hook-form确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AGENTS.mdmetadata.jsonREADME.mdassets/templates/_template.mdreferences/_sections.mdadv-devtools-performance.mdadv-formprovider-memo.mdadv-testing-wrapper.mdarray-complete-default-objects.mdarray-separate-crud-operations.mdarray-unique-fieldarray-per-name.mdarray-use-field-id-as-key.mdarray-virtualization-formprovider.mdctrl-avoid-double-registration.mdctrl-controller-field-props.mdctrl-local-state-combination.mdctrl-single-usecontroller-per-component.mdctrl-usecontroller-isolation.mdformcfg-async-default-values.mdformcfg-default-values.mdformcfg-revalidate-mode.mdformcfg-should-unregister.mdformcfg-useeffect-dependency.mdformcfg-validation-mode.mdformstate-avoid-isvalid-with-onsubmit.mdformstate-destructure-formstate.mdformstate-getfieldstate-for-single-field.mdformstate-subscribe-to-specific-fields.mdformstate-useformstate-isolation.mdinteg-mui-controller-pattern.md详细介绍
React Hook Form 最佳实践
React Hook Form 应用的全面性能优化指南。包含 8 个类别中的 41 条规则,并按影响程度排序,为表单开发、自动重构和代码生成提供指导。
适用场景
在以下情况下参考这些指南:
- 使用 React Hook Form 编写新表单
- 配置 useForm 选项(mode、defaultValues、验证)
- 使用 watch/useWatch 订阅表单值
- 集成受控 UI 组件(MUI、shadcn、Ant Design)
- 使用 useFieldArray 管理动态字段数组
- 检查表单是否存在性能问题
按优先级划分的规则类别
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 表单配置 | 严重 | formcfg- |
| 2 | 字段订阅 | 严重 | sub- |
| 3 | 受控组件 | 高 | ctrl- |
| 4 | 验证模式 | 高 | valid- |
| 5 | 字段数组 | 中高 | array- |
| 6 | 状态管理 | 中 | formstate- |
| 7 | 集成模式 | 中 | integ- |
| 8 | 高级模式 | 低 | adv- |
快速参考
1. 表单配置(严重)
formcfg-validation-mode- 使用 onSubmit 模式以获得最佳性能formcfg-revalidate-mode- 将 reValidateMode 设为 onBlur,以提升提交后的性能formcfg-default-values- 始终提供 defaultValues 来初始化表单formcfg-async-default-values- 使用异步 defaultValues 获取服务端数据formcfg-should-unregister- 启用 shouldUnregister,提高动态表单的内存效率formcfg-useeffect-dependency- 避免在 useEffect 依赖项中使用 useForm 返回的对象
2. 字段订阅(严重)
sub-usewatch-over-watch- 使用 useWatch 替代 watch,以隔离重新渲染sub-watch-specific-fields- 监听特定字段,而非整个表单sub-usewatch-with-getvalues- 将 useWatch 与 getValues 结合使用,确保时序安全sub-deep-subscription- 在组件树中靠近数据使用位置的深层进行订阅sub-avoid-watch-in-render- 避免在渲染过程中调用 watch() 来读取一次性数据sub-usewatch-default-value- 为 useWatch 提供 defaultValue,确保首次渲染时有值sub-useformcontext-sparingly- 在深层嵌套中谨慎使用 useFormContext
3. 受控组件(高)
ctrl-usecontroller-isolation- 使用 useController 隔离重新渲染ctrl-avoid-double-registration- 避免使用 useController 时重复注册ctrl-controller-field-props- 为 UI 库正确连接 Controller 的 field 属性ctrl-single-usecontroller-per-component- 每个组件仅使用一个 useControllerctrl-local-state-combination- 将本地状态与 useController 结合,用于仅供 UI 使用的状态
4. 验证模式(高)
valid-resolver-caching- 在组件外定义 schema,以便缓存 resolvervalid-dynamic-schema-factory- 使用 schema 工厂实现动态验证valid-error-message-strategy- 通过可选链或 lodash get 访问错误valid-inline-vs-resolver- 对复杂规则优先使用 resolver,而非内联验证valid-delay-error- 使用 delayError 对快速连续显示的错误进行防抖valid-native-validation- 对简单表单考虑使用原生验证
5. 字段数组(中高)
array-use-field-id-as-key- 在 useFieldArray 映射中使用 field.id 作为 keyarray-complete-default-objects- 为字段数组操作提供完整的默认对象array-separate-crud-operations- 将连续的字段数组操作分开执行array-unique-fieldarray-per-name- 每个字段名只使用一个 useFieldArray 实例array-virtualization-formprovider- 在虚拟化字段数组中使用 FormProvider
6. 状态管理(中)
formstate-destructure-formstate- 在渲染前解构 formState 属性formstate-useformstate-isolation- 使用 useFormState 订阅隔离的状态formstate-getfieldstate-for-single-field- 使用 getFieldState 访问单个字段的状态formstate-subscribe-to-specific-fields- 在 useFormState 中订阅特定字段名称formstate-avoid-isvalid-with-onsubmit- 在 onSubmit 模式下,避免使用 isValid 控制按钮状态
7. 集成模式(中)
integ-shadcn-form-import- 确认 shadcn Form 组件的导入来源integ-shadcn-select-wiring- 使用 onValueChange 接入 shadcn Select,而非展开属性integ-mui-controller-pattern- 对 Material-UI 组件使用 Controllerinteg-value-transform- 在 Controller 层转换值以进行类型转换
8. 高级模式(低)
adv-formprovider-memo- 使用 React.memo 包装 FormProvider 的子组件adv-devtools-performance- 在生产环境和性能测试期间禁用 DevToolsadv-testing-wrapper- 使用 QueryClient 和 AuthProvider 创建测试包装器
使用方法
阅读各参考文件,了解详细说明和代码示例:
相关技能
- 关于使用 Zod resolver 进行架构验证,请参阅
zod技能 - 关于 React 19 服务端操作,请参阅
react-19技能 - 关于 UI/UX 表单设计,请参阅
frontend-design技能
完整编译文档
如需查看包含所有展开规则的完整指南:AGENTS.md
评论
支持 Markdown