Guia prático do useActionState no React
Aprenda a usar o useActionState no React para simplificar a gestão de estados e ações assíncronas em formulários.
Gerenciar o estado de formulários no React pode ser complicado, entre acompanhar valores, lidar com envios assíncronos e erros. O useActionState é um Hook do React que simplifica essa tarefa, facilitando o gerenciamento de ações do usuário, como envios de formulários e mudanças de estado assíncronas. Ele oferece uma forma mais limpa e previsível de lidar com essas situações.

O useActionState associa uma ação do usuário a um pedaço de estado, simplificando a atualização desse estado conforme a ação é executada. Aqui está um exemplo básico:
const [state, formAction, isPending] = useActionState(actionFn, initialState);
Benefícios principais do useActionState:
- Reduz o código boilerplate: menos variáveis de estado separadas para carregamento, erros e valores submetidos.
- Simplifica atualizações assíncronas: gerencia ações baseadas em promessas sem
useEffectextra. - Melhora a performance: evita re-renderizações desnecessárias ao gerenciar estados de forma eficiente.
Exemplos práticos de useActionState
Aplicativo de contador
Um exemplo básico de uso do useActionState é em um aplicativo de contador. Ele oferece uma maneira limpa de lidar com atualizações assíncronas, como escrever em um servidor ou banco de dados.
"use client";
import { useActionState } from 'react';
async function increment(prevCount) {
await new Promise(resolve => setTimeout(resolve, 1000));
return prevCount + 1;
}
function CounterApp() {
const [count, formAction, isPending] = useActionState(increment, 0);
return (
);
}
export default CounterApp;
No exemplo acima, o useActionState gerencia todo o processo de atualização de estado do contador, mantendo o componente simples mesmo ao lidar com operações assíncronas.
Envio de formulário
Para cenários mais complexos, como o envio de formulários com operações assíncronas e feedback para o usuário, o useActionState simplifica a gestão de estados e efeitos.
"use client";
import { useActionState } from "react";
// submit form action
async function submitForm(prevState, formData) {
await new Promise((resolve) => setTimeout(resolve, 1500));
const email = formData.get("email");
if (!email || !email.includes("@")) {
return { success: false, message: "Please enter a valid email address." };
}
return { success: true, message: "Form submitted successfully!" };
}
function FormApp() {
const [state, formAction, isPending] = useActionState(submitForm, {
success: null,
message: "",
});
return (
);
}
export default FormApp;
Este exemplo mostra como o useActionState gerencia o envio de formulários de forma limpa e declarativa, sem variáveis de estado extras.
Conclusão
O useActionState simplifica a lógica de IU ao lidar com fluxos assíncronos, como envios de formulários ou interações com o servidor, acoplando atualizações de estado diretamente a ações do servidor. Experimente este Hook para tornar seu código mais limpo e fácil de manter.
Boa codificação!