Padrão de Actions
As Actions são responsáveis por centralizar a lógica de execução técnica, comunicação externa e obtenção de dados (API, LocalStorage, Cookies, etc) em arquivos independentes e reutilizáveis.
Estrutura do Arquivo
- Local:
src/actions/ - Sufixo:
.action.ts - Nomenclatura: kebab-case (ex:
get-profile.action.ts,get-local-token.action.ts) - Camada: Application (Agnóstica a funcionalidades específicas)
Exemplo de Implementação
Chamada de API
typescript
import { api } from "@/services/api";
import { User } from "@/types/user";
/**
* Registra um novo usuário no sistema.
*/
export const registerUserAction = async (userData: Partial<User>): Promise<User> => {
try {
const response = await api.post<User>("/auth/register", userData);
return response.data;
} catch (error) {
throw error;
}
};Ação de Recurso Local
typescript
/**
* Obtém o token de sessão armazenado em cookie.
*/
export const getSessionTokenAction = (): string | null => {
return CookieManager.get("session-token") ?? null;
};Diretrizes de Uso
- Escopo Amplo: Lembre-se que uma Action não é apenas para APIs. Use-a para qualquer tarefa técnica que obtenha ou manipule dados fora da lógica de negócio pura (ex: ler cookies, storage, acessar instâncias de SDKs globais).
- Responsabilidade Única: Cada arquivo de ação deve focar em uma única operação ou um grupo muito pequeno de operações relacionadas.
- Independência de UI: Uma action nunca deve acessar componentes de UI, hooks de navegação ou estado local diretamente. Ela recebe parâmetros e retorna promessas. Isso inclui a proibição de exibir Toasts ou Alertas em caso de erro.
- Tipagem: Sempre defina os tipos de entrada e saída para garantir a segurança do TypeScript.
- Integração:
- TanStack Query: As actions devem ser usadas como a
queryFnoumutationFndentro dos hooks do TanStack Query. - Redux Saga: As actions devem ser chamadas via efeito
call(ex:yield call(registerUserAction, payload)) para execução de lógica assíncrona dentro dos sagas.
- TanStack Query: As actions devem ser usadas como a
- Propagação de Erros: Sempre use
throw errorno catch para que a camada superior (Hook do Query ou Saga) possa capturar e tratar a falha adequadamente.
Lista de Exemplos Sugeridos
get-list-user.action.tsget-profile.action.tsregister-user.action.tslogout.action.tsupdate-profile.action.tsdelete-feed.action.ts