HomeReact
Chapter 5

05 — Forms & Controlled Components

Forms are how users input data in web apps. React forms differ from HTML forms — you typically control every input with state (a "controlled component").

Controlled vs Uncontrolled

AspectControlledUncontrolled
State managed byReact (useState)DOM itself
Access value viaState variableref (useRef)
Re-rendersOn every keystrokeNone
ValidationInstant (per keystroke)On submit
When to useMost cases ✅File inputs, third-party libs

Common Form Elements

ElementValue PropEvent
<input type="text">valueonChange
<textarea>valueonChange
<select>valueonChange
<input type="checkbox">checkedonChange
<input type="radio">checkedonChange
<input type="file">N/A (uncontrolled)onChange

Validation Strategies

StrategyTimingProsCons
On changeEvery keystrokeInstant feedbackCan feel aggressive
On blurWhen field loses focusGood UX balanceDelayed feedback
On submitForm submissionSimplestUser waits
HybridBlur first, then changeBest UXMore code

Libraries for Complex Forms

  • React Hook Form — performant (minimal re-renders), great DX
  • Formik — popular, pairs well with Yup validation
  • Zod + react-hook-form — type-safe schema validation

File

  • forms.tsx — controlled inputs, multi-field forms, validation, checkbox/radio, select, file upload, form patterns