Pular para o conteúdo
Skillpedia
Sites e telas (frontend)48 mil · #3057

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

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/frontend-optimistic-mutations/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/frontend-optimistic-mutations/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-mutations

Ou 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.md
Conteú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

  1. O ciclo de vida otimista é fixo. cancelar → instantâneo → aplicar patch → (erro: reverter) → (concluir: invalidar). Toda mutação otimista segue os mesmos cinco passos.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#3057
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas