Skip to content

Controlled Components

All forms must use React Hook Form for state management and validation. Form fields must be implemented as reusable, controlled components that integrate seamlessly with React Hook Form's context.

Rules

  • Reusable form fields: Build input components (e.g., TextField, SelectField, CheckboxField) as controlled components tied to React Hook Form.
  • SOLID-compliant: Each form field component must follow single responsibility—handle form logic only, not styling or layout.
  • Style flexibility: Components must be designed to accept class names, wrappers, or style overrides so they can adapt to different design systems (e.g., Tailwind, MUI).
  • React Hook Form context: Do not pass control, setValue, watch, or similar props manually. Use useFormContext to access them within the form field.

Guidelines

  • The component owns field registration and validation logic.
  • The parent form provides layout, spacing, and styling.
  • Each component must accept name, label, and validation-related props.
  • Errors must be displayed consistently via the component.

Example (concept)

  • A reusable TextField component connects an input to React Hook Form, handles validation, and shows errors.
  • Inside a FormProvider, you can use multiple TextField components without extra wiring.
  • This guarantees forms are consistent, reusable, and maintainable, while leaving design choices flexible.