Controlled vs Uncontrolled
Controlled: React controla o valor via state. Uncontrolled: DOM mantém o valor, acesso via ref.
Controlled Components: o valor do input está no state do React (value={state} + onChange={setState}). Uncontrolled: o DOM gerencia internamente, React acessa via ref no momento necessário (defaultValue + ref.current.value).
Controlled com forms grandes causa re-render por keystroke. Uncontrolled é menos React-idiomático e dificulta validação em tempo real.
Controlled para forms simples e validação live. Uncontrolled para forms grandes e performance crítica. react-hook-form usa uncontrolled com a interface de controlled.
Misturar value + defaultValue causa warning. Defina ou um ou outro. defaultValue só roda no primeiro render — útil para inicialização.