0Pricing
React Academy · Aula

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

  1. Ações do servidor no React 19 e no Next.js
  2. Ações de formulário: substituindo rotas de API para mutações
  3. useActionState e useFormStatus
  4. Aprimoramento progressivo com Ações do servidor
← Voltar para React Academy