frontend-optimistic-mutations
Ajuda seu agente a atualizar informações em sites de forma rápida e sem falhas. Melhora a experiência do usuário ao fazer mudanças.
O que ela faz
Esta habilidade ajuda a fazer com que as atualizações na tela pareçam instantâneas para o usuário. Ela atualiza a interface imediatamente e, se algo der errado, desfaz a mudança sem deixar rastros.
Quando usar
- ✓Ao marcar um item como concluído.
- ✓Ao alterar o status de um pedido.
- ✓Ao reordenar uma lista de itens.
Exemplo do que pedir para a IA
“Faça com que a marcação de 'pago' em uma fatura pareça instantânea, mas desfaça se houver um erro.”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Quando você faz uma alteração, a tela é atualizada na hora. Se a alteração falhar ao ser enviada ao servidor, a tela volta ao estado anterior como se nada tivesse acontecido.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add sickn33/agentic-awesome-skills --skill frontend-optimistic-mutationsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/frontend-optimistic-mutations/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Mutações Otimistas no Frontend (o caminho de escrita)
Quando Usar
Use esta habilidade quando precisar de uma disciplina portátil e independente de framework para o caminho de escrita de qualquer aplicativo React ou React Native que use uma camada de consulta/cache. Codifica o ciclo de vida da atualização otimista (cancelar consultas em andamento → instantâneo de todo o cache afetado → aplicar patch instantaneamente → reverter exatamente em caso de erro → invalidar em...
Habilidade portátil — legível por Claude Code, OpenCode, Codex, Cursor, Windsurf e outros. Esta habilidade descreve a disciplina do caminho de escrita — atualizações otimistas, reversão, idempotência, coerência de cache — não uma biblioteca de UI ou um sistema de estilo. Ela se baseia diretamente na habilidade contratos-de-dados-frontend (escritas passam pelo cliente tipado) e na habilidade arquitetura-frontend (mutações vivem em
modules/{feature}/hooks/, indexadas por uma fábrica).
O objetivo: uma escrita parece instantânea (a UI a reflete antes que o servidor confirme), é segura (uma falha restaura o estado anterior exato, e uma nova tentativa nunca cobra duas vezes) e deixa o cache coerente (a página de detalhes e todas as páginas de lista concordam). Todas as três ao mesmo tempo — essa é a arte.
0. As cinco ideias centrais
- O ciclo de vida otimista é fixo. cancelar → instantâneo → aplicar patch → (erro: reverter) → (concluir: invalidar). Toda mutação otimista segue os mesmos cinco passos.
- Reverta exatamente. Em caso de falha, restaure o instantâneo exato tirado antes do patch — não uma re-derivação de "melhor palpite". Mantenha o instantâneo no contexto da mutação.
- A idempotência é gerada uma vez, não por tentativa. A chave é criada na inicialização do formulário (ou primeira intenção), para que uma nova tentativa de rede reproduza a resposta original do servidor em vez de executar a ação duas vezes.
- Os caches se movem em sincronia. Uma mudança de status aplica patch ao cache de detalhes e a todas as páginas de lista que contêm a entidade, para que os indicadores nunca discordem entre as superfícies.
- O estado do servidor nunca entra no armazenamento do cliente. O estado otimista vive no cache de consulta, não em Zustand/Redux. O cache é a única fonte de verdade para os dados do servidor (por arquitetura-frontend §4).
1. Quando ser otimista (e quando não ser)
| Situação | Estratégia |
|---|---|
| Escrita de alta confiança e baixo conflito (alternar status, curtir, marcar como pago, reordenar) | Otimista — aplicar patch imediatamente, reverter em caso de erro. |
| Criação que retorna um ID/número/total gerado pelo servidor | Estado pendente, depois setQueryData da resposta do servidor. Uma linha otimista temporária é opcional; reconciliar no sucesso. |
| Escrita destrutiva ou difícil de reverter (excluir com cascata, enviar dinheiro) | Confirmar primeiro, depois otimista ou pendente — nunca otimista silencioso. |
| Escrita cujo resultado o usuário ainda não pode ver (trabalho em segundo plano) | Pendente + toast, invalidar quando concluído. Sem patch otimista. |
O otimismo é uma ferramenta de UX para escritas que você tem confiança de que terão sucesso. Se a falha for comum ou cara de desfazer, prefira um estado pendente.
2. O ciclo de vida otimista (TanStack Query)
A forma canônica. Cada passo tem um trabalho; pular um quebra a correção.
// modules/invoice/hooks/useInvoiceMutations.ts
interface MarkPaidContext {
previousInvoice: Invoice | undefined; // instantâneo do detalhe
previousLists: Array<[readonly unknown[], InvoiceListResponse]>; // instantâneo de cada página de lista
}
export function useMarkInvoicePaid() {
const queryClient = useQueryClient();
const notifyError = useApiErrorToast();
return useMutation<Invoice, ApiError, { id: InvoiceId }, MarkPaidContext>({
mutationFn: ({ id }) => apiClient.post<Invoice>(INVOICE_API.markPaid(id)),
// 1 + 2 + 3: cancelar leituras em andamento, instantâneo, aplicar patch
onMutate: async ({ id }) => {
await queryClient.cancelQueries({ queryKey: invoiceKeys.all }); // (1) sem sobrescrita de refetch tardio
const detailKey = invoiceKeys.detail(id);
…
Perguntas frequentes
O que significa 'atualização otimista'?
É quando a interface do usuário é atualizada imediatamente para refletir uma mudança, antes mesmo de o servidor confirmar que a mudança foi bem-sucedida. É como preencher um formulário e ver o 'salvo' aparecer antes de o sistema realmente salvar.
O que é 'desfazer' (rollback)?
É a capacidade de reverter uma mudança para o estado exato em que estava antes, caso ocorra um erro. Garante que o usuário não fique com um estado inconsistente ou incorreto.
Por que é importante que as listas e detalhes concordem?
Para que a informação seja consistente em todo o aplicativo. Se você marca um item como pago em uma lista, todos os outros lugares que mostram esse item (como a página de detalhes) também devem refletir essa mudança imediatamente.
Detalhes
Descrição original do autor
A portable, framework-agnostic discipline for the write path of any React or React Native app using a query/cache layer.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #3057
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
Skills parecidas
angular-developer
Ajuda seu agente a criar código Angular e a dar conselhos sobre a estrutura do projeto. É útil para iniciar novos projetos, criar partes do código ou melhorar a performance e acessibilidade.
affaan-m/ECC
frontend-a11y
Ajuda seu agente a tornar interfaces web acessíveis para todos. Ele garante que sites e apps funcionem bem com leitores de tela e navegação por teclado.
affaan-m/ECC
frontend-patterns
Faz seu agente aplicar padrões modernos no desenvolvimento frontend. Ele otimiza performance, gerencia estado e segue boas práticas em React e Next.js.
affaan-m/ECC