Em um componente controlado o estado do React é a fonte da verdade: o input lê o valor do estado e cada tecla passa pelo onChange. Em um componente não controlado o DOM guarda o valor e você o lê com uma ref ou a partir dos dados do formulário no submit. Controlado te dá validação ao vivo e UI derivada; não controlado significa muito menos renders e menos código em formulários grandes.
Por que os entrevistadores perguntam isso
O entrevistador está checando se você sabe onde o estado de fato vive e se você não deixa tudo controlado por hábito. Ele também quer ver consciência do custo, já que um input controlado re-renderiza a subárvore dele a cada tecla, o que é tranquilo com três campos e doloroso com oitenta. Uma resposta moderna menciona form actions e bibliotecas que mantêm os inputs não controlados de propósito.
Como estruturar sua resposta
- Defina os dois pelo lugar onde o valor mora.
- Diga o que cada um te dá, validação ao vivo versus menos renders.
- Dê seu padrão e o ponto em que você troca.
- Mencione form actions ou uma biblioteca de formulário e por que elas puxam para o não controlado.
Exemplo de resposta
Controlado quer dizer que o React é dono do valor: value vem do estado, onChange escreve de volta, e o input não muda sem um render. Não controlado quer dizer que o DOM é o dono e eu só leio quando preciso, seja por uma ref ou pelos dados enviados do formulário. Meu padrão em formulários pequenos é controlado, porque normalmente eu quero validação enquanto o usuário digita ou um campo que depende de outro. Quando o formulário passa de uns quinze ou vinte inputs, ou quando eu tenho um campo que dispara um re-render caro a cada tecla, eu viro para não controlado e valido no blur e no submit. É isso que as bibliotecas de formulário populares fazem por baixo dos panos, elas registram os inputs e assinam de forma estreita em vez de re-renderizar o formulário inteiro. Com as form actions do React 19 eu puxo ainda mais para o não controlado, porque a action recebe o FormData de graça, então num formulário simples de criar ou editar eu consigo pular o estado por completo e só tratar os estados de pendente e de erro com o useActionState.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Qual é o aviso que o React dá quando um input passa de não controlado para controlado, e por quê?
- Como você validaria um formulário não controlado no submit?
- Como as form actions do React 19 mudam sua abordagem aqui?
Mais perguntas para Desenvolvedor React
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas