关于 react-hook-form
面向使用 React Hook Form 构建表单的开发者,提供性能与实现指南。规则按优先级涵盖配置、订阅、受控组件、校验、字段数组和集成。
主要功能
- 018 类共 45 条规则
- 02按优先级提供表单指南
- 03字段订阅实践
- 04受控组件模式
- 05校验与字段数组建议
适用场景
- 01使用 React Hook Form 构建表单
- 02减少表单不必要的重渲染
- 03审查校验与字段数组代码
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pymodel/ react-frontend-skills --skill react-hook-form安装后在 Claude Code 中输入/react-hook-form确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/adv-devtools-performance.mdadv-formprovider-memo.mdadv-opaque-types.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.mdinteg-shadcn-form-import.mdinteg-shadcn-select-wiring.mdinteg-typed-submit-server-action.mdinteg-value-transform.md详细介绍
React Hook Form 最佳实践
这是一份全面的 React Hook Form 应用性能优化指南,包含 8 个类别中的 45 条规则,并按影响程度排序,帮助指导表单开发、自动重构和代码生成。
适用场景
在以下情况下参考这些指南:
- 使用 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- 根据用户体验和验证成本选择验证模式formcfg-revalidate-mode- 谨慎选择提交后的重新验证模式formcfg-default-values- 始终提供 defaultValues 来初始化表单formcfg-async-default-values- 使用异步 defaultValues 加载服务端数据formcfg-should-unregister- 根据提交语义选择 shouldUnregisterformcfg-useeffect-dependency- 避免将 useForm 返回对象用作 useEffect 依赖项
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- 正确接入 Controller 字段属性,以适配 UI 库ctrl-single-usecontroller-per-component- 在有助于隔离时拆分受控字段ctrl-local-state-combination- 将本地状态与 useController 结合,用于仅 UI 状态
4. 验证模式(高)
valid-resolver-caching- 在组件外定义 schema,以启用 resolver 缓存valid-dynamic-schema-factory- 使用 schema 工厂实现动态验证valid-error-message-strategy- 使用 ErrorMessage(7.88+)或可选链渲染字段错误valid-trigger-should-touch- 触发验证时将字段标记为已触碰(7.87+)valid-inline-vs-resolver- 复杂规则优先使用 resolver,而不是内联验证valid-delay-error- 使用 delayError 对快速出现的错误提示进行防抖valid-native-validation- 对简单表单考虑使用原生验证valid-form-level-validate- 使用表单级 validate 选项验证跨字段规则(7.72+)
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 和 getErrors 读取单个字段formstate-subscribe-to-specific-fields- 在 useFormState 中订阅特定字段名称formstate-avoid-isvalid-with-onsubmit- 使提交门控与验证模式保持一致
7. 集成模式(中等)
integ-shadcn-form-import- 验证 shadcn Form 组件的导入来源integ-shadcn-select-wiring- 使用 onValueChange 而非展开运算符连接 shadcn Selectinteg-mui-controller-pattern- 对 Material-UI 组件使用 Controllerinteg-value-transform- 在 Controller 层转换值以进行类型强制转换integ-typed-submit-server-action- 使用带类型的 handleSubmit 结果或 Server Action 提交(7.84+)
8. 高级模式(低)
adv-formprovider-memo- 仅在性能分析后对 FormProvider 子组件进行记忆化adv-devtools-performance- 在生产环境和性能测试期间禁用 DevToolsadv-testing-wrapper- 创建包含 QueryClient 和 AuthProvider 的测试包装器adv-opaque-types- 在 OpaqueTypes 中注册值类(7.87+)
使用方法
先在项目根目录运行:
npx -y @pymodel/react-frontend-skills detect # installed vs. targeted versions
npx -y @pymodel/react-frontend-skills scan --skill react-hook-form # deprecated APIs → rule IDs
对于上面与任务匹配的每条规则,以及每个 scan 命中项,请阅读 references/<rule-id>.md,了解其重要性以及错误与正确的代码示例。
相关技能
- 如需使用 Zod resolver 进行架构验证,请参阅
zod技能 - 如需了解 React 19 Server Actions,请参阅
react技能 - 如需了解 UI/UX 表单设计,请参阅
ui-design技能
评论
支持 Markdown