Skip to content

Actions (Camada Application)

As Actions representam a ponte entre o sistema e recursos externos ou globais. Elas residem na Camada de Aplicação (Application), pois são utilitários gerais de execução que podem ser consumidos por múltiplas funcionalidades.


O que são?

São funções assíncronas (ou síncronas) responsáveis por realizar tarefas de I/O (Input/Output) ou acessar recursos compartilhados. Embora o uso mais comum seja chamadas de API, as Actions englobam qualquer ação que obtenha ou manipule dados fora do fluxo direto da lógica de negócio.

Elas não devem conter lógica de interface e nem manipular o estado global diretamente (isso é papel dos Hooks ou Redux).


Quando usar?

  1. Chamadas de API: Buscar dados, criar novos registros, atualizar ou deletar informações.
  2. Acesso a Armazenamento Local: Obter ou salvar dados no localStorage, AsyncStorage ou Cookies.
  3. Execução de Lógica Global: Obter uma lista de permissões estática, ler configurações do sistema ou manipular instâncias de SDKs.
  4. Integração com SDKs externos: Chamadas para serviços como Firebase, Agora ou Sentry.

Exemplos de Uso:

Chamada de API:

javascript
// src/actions/user.action.ts
export const updateProfileAction = async (userId, data) => {
  try {
    const response = await apiClient.put(`/users/${userId}`, data);
    return response.data;
  } catch (error) {
    throw error;
  }
};
javascript
// src/actions/auth.action.ts
export const getSessionTokenAction = () => {
  // Obtém dado de um cookie ou storage local
  const token = CookieManager.get('session-token');
  return token;
};

Obtenção de Lista Local:

javascript
// src/actions/config.action.ts
export const getSupportedLanguagesAction = () => {
  // Retorna uma lista estática ou processada localmente
  return ['pt-BR', 'en-US', 'es-ES'];
};

Quando NÃO usar?

  1. Lógica de Validação Pura: Se você precisa validar se um e-mail é válido, use uma Rule na camada de Feature, não uma Action.
  2. Feedback Visual: Nunca dispare Toasts ou Navegação dentro de uma Action. Isso é responsabilidade da Camada de Tela.
  3. Regras de Negócio: Se os dados precisam de decisões baseadas em regras complexas, a Action apenas fornece os dados, e a Feature aplica a regra.

Regras de Ouro

  • Não trate erros aqui: A Action deve sempre deixar o erro subir (throw error) para que a Camada de Tela decida como informar o usuário.
  • Relance o Erro: Essencial para que o TanStack Query ou Sagas identifiquem a falha.
  • Caminho Global: As actions ficam em src/actions/ para serem acessíveis por qualquer parte do sistema.
  • Tipagem: Sempre defina os tipos de entrada e saída para garantir contrato entre Front e Back.