关于 react-hook-form
面向使用 React Hook Form 构建、重构或审查表单的开发者技能,按影响优先级整理了 8 类共 41 条实践规则。
主要功能
- 01按优先级划分的 8 类、41 条规则
- 02表单配置与验证指导
- 03订阅和渲染性能模式
- 04受控组件与 UI 库集成
- 05动态字段数组和状态管理指导
适用场景
- 01设置表单默认值和验证模式
- 02减少不必要的表单重渲染
- 03连接受控 UI 组件
- 04审查动态字段数组实现
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ shipshitdev/ skills --skill react-hook-form安装后在 Claude Code 中输入/react-hook-form确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AGENTS.mdplugin.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、validation)
- 使用 watch/useWatch 订阅表单值
- 集成受控 UI 组件(MUI、shadcn、Ant Design)
- 使用 useFieldArray 管理动态字段数组
- 检查表单是否存在性能问题
按优先级划分的规则类别
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 表单配置 | CRITICAL | formcfg- |
| 2 | 字段订阅 | CRITICAL | sub- |
| 3 | 受控组件 | HIGH | ctrl- |
| 4 | 验证模式 | HIGH | valid- |
| 5 | 字段数组 | MEDIUM-HIGH | array- |
| 6 | 状态管理 | MEDIUM | formstate- |
| 7 | 集成模式 | MEDIUM | integ- |
| 8 | 高级模式 | LOW | adv- |
快速参考
1. 表单配置(CRITICAL)
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. 字段订阅(CRITICAL)
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. 受控组件(HIGH)
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. 验证模式(HIGH)
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. 字段数组(MEDIUM-HIGH)
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 Selectinteg-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技能 - 进行 UI/UX 表单设计,请参阅
frontend-design技能
完整编译文档
如需查看包含所有展开规则的完整指南,请参阅 ${CLAUDE_SKILL_DIR}/AGENTS.md(需要深入参考规则时加载)。
评论
支持 Markdown