SuperAPI AI 工具集

react-hook-form

前端与建站

查看项目

更新于 10-15 14:37

技能介绍

用途

本技能提供 React Hook Form 应用的性能优化指南,面向使用 React Hook Form 7 编写、审查或重构表单的场景。它包含 45 条规则,分布在 8 个类别中,按影响程度排序,可用于指导表单开发、自动化重构和代码生成。

适用时机

在以下情况参考这些指南:

  • 使用 React Hook Form 编写新表单
  • 配置 useForm 选项(mode、defaultValues、validation)
  • 通过 watch/useWatch 订阅表单值
  • 集成受控 UI 组件(MUI、shadcn、Ant Design)
  • 使用 useFieldArray 管理动态字段数组
  • 审查表单的性能问题

规则类别(按优先级)

优先级 类别 影响 前缀
1 Form Configuration CRITICAL formcfg-
2 Field Subscription CRITICAL sub-
3 Controlled Components HIGH ctrl-
4 Validation Patterns HIGH valid-
5 Field Arrays MEDIUM-HIGH array-
6 State Management MEDIUM formstate-
7 Integration Patterns MEDIUM integ-
8 Advanced Patterns LOW adv-

快速参考

1. 表单配置(CRITICAL)

  • formcfg-validation-mode - 根据 UX 与校验成本选择校验模式
  • formcfg-revalidate-mode - 有意识地选择提交后重新校验模式
  • 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 字段属性
  • ctrl-single-usecontroller-per-component - 当隔离有帮助时拆分受控字段
  • ctrl-local-state-combination - 结合本地状态与 useController 处理纯 UI 状态

4. 校验模式(HIGH)

  • 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. 字段数组(MEDIUM-HIGH)

  • array-use-field-id-as-key - 在 useFieldArray 映射中使用 field.id 作为 key
  • array-complete-default-objects - 为字段数组操作提供完整的默认对象
  • array-separate-crud-operations - 分离顺序执行的字段数组操作
  • array-unique-fieldarray-per-name - 每个字段名使用单个 useFieldArray 实例
  • array-virtualization-formprovider - 对虚拟化字段数组使用 FormProvider

6. 状态管理(MEDIUM)

  • 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. 集成模式(MEDIUM)

  • integ-shadcn-form-import - 验证 shadcn Form 组件的导入来源
  • integ-shadcn-select-wiring - 使用 onValueChange 而非展开方式连接 shadcn Select
  • integ-mui-controller-pattern - 对 Material-UI 组件使用 Controller
  • integ-value-transform - 在 Controller 层转换值以实现类型强制
  • integ-typed-submit-server-action - 使用类型化的 handleSubmit 结果或 Server Action 提交(7.84+)

8. 高级模式(LOW)

  • adv-formprovider-memo - 仅在性能分析后对 FormProvider 子元素进行 memo 化
  • adv-devtools-performance - 在生产环境和性能测试期间禁用 DevTools
  • adv-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

针对上述每条与任务匹配的规则以及每个扫描命中项,阅读 references/<rule-id>.md:了解其重要性,以及错误与正确代码的对比。

相关技能

  • 使用 Zod resolver 进行 schema 校验,参见 zod 技能
  • React 19 server actions,参见 react 技能
  • UI/UX 表单设计,参见 ui-design 技能