react-hook-form
100
总安装量
99
周安装量
#2304
全站排名
安装命令
npx skills add https://github.com/pproenca/dot-skills --skill react-hook-form
Agent 安装分布
claude-code
69
opencode
67
gemini-cli
62
codex
61
github-copilot
58
antigravity
55
Skill 文档
React Hook Form Best Practices
Comprehensive performance optimization guide for React Hook Form applications. Contains 41 rules across 8 categories, prioritized by impact to guide form development, automated refactoring, and code generation.
When to Apply
Reference these guidelines when:
- Writing new forms with React Hook Form
- Configuring useForm options (mode, defaultValues, validation)
- Subscribing to form values with watch/useWatch
- Integrating controlled UI components (MUI, shadcn, Ant Design)
- Managing dynamic field arrays with useFieldArray
- Reviewing forms for performance issues
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 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- |
Quick Reference
1. Form Configuration (CRITICAL)
formcfg-validation-mode– Use onSubmit mode for optimal performanceformcfg-revalidate-mode– Set reValidateMode to onBlur for post-submit performanceformcfg-default-values– Always provide defaultValues for form initializationformcfg-async-default-values– Use async defaultValues for server dataformcfg-should-unregister– Enable shouldUnregister for dynamic form memory efficiencyformcfg-useeffect-dependency– Avoid useForm return object in useEffect dependencies
2. Field Subscription (CRITICAL)
sub-usewatch-over-watch– Use useWatch instead of watch for isolated re-renderssub-watch-specific-fields– Watch specific fields instead of entire formsub-usewatch-with-getvalues– Combine useWatch with getValues for timing safetysub-deep-subscription– Subscribe deep in component tree where data is neededsub-avoid-watch-in-render– Avoid calling watch() in render for one-time readssub-usewatch-default-value– Provide defaultValue to useWatch for initial rendersub-useformcontext-sparingly– Use useFormContext sparingly for deep nesting
3. Controlled Components (HIGH)
ctrl-usecontroller-isolation– Use useController for re-render isolationctrl-avoid-double-registration– Avoid double registration with useControllerctrl-controller-field-props– Wire Controller field props correctly for UI librariesctrl-single-usecontroller-per-component– Use single useController per componentctrl-local-state-combination– Combine local state with useController for UI-only state
4. Validation Patterns (HIGH)
valid-resolver-caching– Define schema outside component for resolver cachingvalid-dynamic-schema-factory– Use schema factory for dynamic validationvalid-error-message-strategy– Access errors via optional chaining or lodash getvalid-inline-vs-resolver– Prefer resolver over inline validation for complex rulesvalid-delay-error– Use delayError to debounce rapid error displayvalid-native-validation– Consider native validation for simple forms
5. Field Arrays (MEDIUM-HIGH)
array-use-field-id-as-key– Use field.id as key in useFieldArray mapsarray-complete-default-objects– Provide complete default objects for field array operationsarray-separate-crud-operations– Separate sequential field array operationsarray-unique-fieldarray-per-name– Use single useFieldArray instance per field namearray-virtualization-formprovider– Use FormProvider for virtualized field arrays
6. State Management (MEDIUM)
formstate-destructure-formstate– Destructure formState properties before renderformstate-useformstate-isolation– Use useFormState for isolated state subscriptionsformstate-getfieldstate-for-single-field– Use getFieldState for single field state accessformstate-subscribe-to-specific-fields– Subscribe to specific field names in useFormStateformstate-avoid-isvalid-with-onsubmit– Avoid isValid with onSubmit mode for button state
7. Integration Patterns (MEDIUM)
integ-shadcn-form-import– Verify shadcn Form component import sourceinteg-shadcn-select-wiring– Wire shadcn Select with onValueChange instead of spreadinteg-mui-controller-pattern– Use Controller for Material-UI componentsinteg-value-transform– Transform values at Controller level for type coercion
8. Advanced Patterns (LOW)
adv-formprovider-memo– Wrap FormProvider children with React.memoadv-devtools-performance– Disable DevTools in production and during performance testingadv-testing-wrapper– Create test wrapper with QueryClient and AuthProvider
How to Use
Read individual reference files for detailed explanations and code examples:
- Section definitions – Category structure and impact levels
- Rule template – Template for adding new rules
- Reference files:
references/{prefix}-{slug}.md
Related Skills
- For schema validation with Zod resolver, see
zodskill - For React 19 server actions, see
react-19skill - For UI/UX form design, see
frontend-designskill
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md