React Hook Form manages form state efficiently with minimal re-renders. It uses uncontrolled components and refs by default, improving performance.
Combine with Zod for schema validation: const schema = z.object({ name: z.string().min(2), email: z.string().email() }). The resolver integrates validation with the form library.
Controlled vs uncontrolled: controlled components have value and onChange props (React controls the input). Uncontrolled use refs (DOM controls the input). React Hook Form uses uncontrolled by default.
Field arrays handle dynamic lists: add, remove, reorder items. Form-level errors display with formState.errors. Watch specific fields to trigger conditional logic.
Multi-step forms use step state and conditional rendering. Persist form data in localStorage for draft recovery. Handle file uploads with FormData API.