What React Hook Form Does
- Uncontrolled inputs — refs instead of state, near-zero re-renders
- Validation — built-in rules + Zod/Yup/Joi resolvers
- Field arrays — dynamic add/remove fields
- Error handling — typed errors object
- Watch — subscribe to specific fields
- Form context — share form across components
- DevTools — browser extension to inspect forms
Architecture
register() returns props (onChange, onBlur, ref) you spread on inputs. The library tracks values via refs, not React state. handleSubmit validates and calls your callback with typed data. formState is a proxy that only re-renders subscribers.
Self-Hosting
Client library, no backend.
Key Features
- Smallest forms library (9KB)
- Zero dependencies
- Built-in validation + schema resolvers (Zod, Yup, Joi, Valibot)
- Watch API for reactive logic
- Field arrays for dynamic forms
- TypeScript-first
- DevTools extension
- Works with React Native
Comparison
| Library | Strategy | Re-renders | Validation | Bundle |
|---|---|---|---|---|
| React Hook Form | Uncontrolled | Minimal | Built-in + resolvers | 9KB |
| Formik | Controlled | Many | Yup | 13KB |
| TanStack Form | Controlled | Granular | Standard Schema | 12KB |
| Final Form | Subscription | Minimal | Custom | 5KB |
常见问题 FAQ
Q: 和 Zod 怎么配合?
A: 用 @hookform/resolvers/zod,传 resolver: zodResolver(schema)。表单类型自动从 schema 推断。
Q: 受控组件怎么办?
A: 用 Controller 组件包装第三方 UI(MUI、AntD 等)。提供 controlled adapter。
Q: SSR 友好吗? A: 友好。所有状态在 ref 里,不影响 hydration。
来源与致谢 Sources
- Docs: https://react-hook-form.com
- GitHub: https://github.com/react-hook-form/react-hook-form
- License: MIT