useActionState e useFormStatus
Use useActionState para acompanhar o estado pendente e os erros, e useFormStatus para desativar botões de envio durante o processamento.
useActionState e useFormStatus é uma aula grátis de React Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.
Apresentando useActionState
useActionState(action, initialState) é um gancho do React 19 que envolve uma Ação do servidor para acompanhar seu estado entre os envios. Ele recebe a função de ação e um valor de estado inicial e retorna uma tupla que pode ser usada para controlar toda a experiência do formulário.
A tupla retornada
O gancho retorna [state, formAction, isPending]. O state contém o valor retornado mais recentemente pela ação, começando como null ou como o seu valor inicial. formAction é a ação envolvida que deve ser passada ao formulário. isPending é true enquanto a ação está sendo executada no servidor.
Acompanhando o estado entre os envios
Cada vez que o formulário é enviado, a Ação do servidor é executada e seu valor retornado se torna o novo state. Na primeira renderização, state é igual a initialState. Isso facilita exibir diferentes partes da interface dependendo de já ter havido envios anteriores e do que eles retornaram.
Exibindo erros de validação no formulário
Se a Ação do servidor retornar { errors: { email: 'Invalid email' } }, você poderá exibir o erro no próprio formulário: {state.errors?.email && <p>{state.errors.email}</p>}. Como o estado persiste entre as renderizações, a mensagem de erro permanece visível até que o próximo envio bem-sucedido substitua o estado.
Exibindo mensagens de sucesso
Quando a ação retorna { success: true }, o componente pode renderizar uma mensagem de sucesso: {state?.success && <p>Form submitted!</p>}. O formulário pode ser ocultado ou substituído condicionalmente pela mensagem de sucesso com base no valor do estado.
Apresentando useFormStatus
useFormStatus() é um gancho que lê o estado pendente do elemento <form> ancestral mais próximo. Ele retorna um objeto que inclui { pending: boolean }. Esse gancho deve ser usado dentro de um componente que seja filho do formulário, e não no componente que renderiza o próprio formulário.
Por que existe a restrição de localização
A restrição que exige o uso de useFormStatus dentro do formulário existe porque o gancho lê o contexto do formulário na árvore do React acima dele. Se fosse chamado no mesmo componente que renderiza o formulário, ele seria um irmão do formulário, não um descendente, e não teria acesso ao estado do formulário.
Criando um componente de botão de envio
O padrão comum é extrair o botão de envio para seu próprio componente: function SubmitButton() { const { pending } = useFormStatus(); return <button disabled={pending}>Submit</button>; }. Esse componente é então colocado dentro do formulário, permitindo que ele acesse o estado pendente do formulário.
Desabilitando o botão de envio
Definir disabled={pending} no botão de envio evita envios duplicados. Quando o usuário clica em enviar e a Ação do servidor está sendo executada, pending é true, o botão fica desabilitado e não pode ser clicado. Quando a ação é concluída, pending volta a false e o botão é habilitado novamente.
Combinando os dois ganchos
O padrão completo de experiência do usuário para formulários combina os dois ganchos: useActionState no componente do formulário acompanha o resultado da ação e fornece formAction, enquanto useFormStatus, dentro de um componente filho SubmitButton, acompanha o estado pendente. Juntos, eles oferecem a exibição de erros de validação e um botão de envio responsivo.
Interface otimista com useOptimistic
Para uma experiência ainda mais responsiva, useOptimistic funciona em conjunto com useActionState. Você atualiza imediatamente a interface com o resultado esperado antes que o servidor responda e depois a sincroniza quando a resposta real chega. Esse padrão é comum em botões de curtida, listas de tarefas e outras interações que exigem retorno rápido.
Localização de useFormStatus
Onde useFormStatus deve ser chamado para funcionar corretamente?
Recapitulação da lição
useActionState(action, initialState) retorna [state, formAction, isPending] para acompanhar os resultados das Ações do servidor. O estado contém o valor retornado pela ação, permitindo exibir erros e mensagens de sucesso no próprio formulário. useFormStatus() fornece { pending } dentro dos componentes filhos do formulário, permitindo criar botões de envio responsivos. Juntos, os dois ganchos criam uma experiência de formulário completa e acessível.
Perguntas Frequentes
A aula “useActionState e useFormStatus” é grátis?
Sim — o texto completo de “useActionState e useFormStatus” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.
O que vou aprender em “useActionState e useFormStatus”?
Use useActionState para acompanhar o estado pendente e os erros, e useFormStatus para desativar botões de envio durante o processamento. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar React Academy?
Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “useActionState e useFormStatus”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de React Academy?
Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Ações do servidor no React 19 e no Next.js
- Ações de formulário: substituindo rotas de API para mutações
- useActionState e useFormStatus
- Aprimoramento progressivo com Ações do servidor