0Pricing
React Academy · Aula

Implementando atualizações otimistas manualmente

Aplique o estado otimista localmente, enfileire a mutação e trate explicitamente os casos de sucesso e falha.

Implementando atualizações otimistas manualmente é uma aula grátis de React Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.

Estado antes da mutação

As atualizações otimistas manuais começam com o estado local do componente inicializado com dados do servidor: const [items, setItems] = useState(serverItems). Esse estado local é o que você exibe e o que modificará de forma otimista. Você NOT deve modificar diretamente os dados obtidos do servidor — mantenha uma cópia local sob seu controle.

A etapa da atualização otimista

Quando o usuário inicia uma mutação (clicando em "Adicionar", "Curtir" ou "Excluir"), faça a atualização do estado imediatamente, antes de chamar a API: setItems(prev => [...prev, newItem]). A interface reflete a alteração instantaneamente. Somente depois dessa atualização você envia a solicitação de rede real.

Capturando o estado anterior

Antes de fazer a atualização otimista, capture o estado atual: const previousItems = items. Esse instantâneo é o seu ponto de reversão. Se a chamada à API falhar, você restaura esse valor. Armazene-o em uma variável (não no estado), pois só precisará dele durante a mutação pendente.

Fazendo a chamada à API

Depois da atualização otimista, faça a chamada à API de forma assíncrona. Envolva-a em try/catch. Em caso de sucesso, você pode opcionalmente buscar os dados novamente para sincronizá-los com o estado do servidor ou confiar no estado otimista se o servidor retornaria os mesmos dados. Em caso de falha, use o estado anterior capturado para fazer a reversão.

Reversão em caso de falha

No bloco de tratamento de erro da mutação: setItems(previousItems). Isso restaura o estado para o que era antes da atualização otimista. Depois da reversão, exiba uma notificação de erro. Os usuários entendem que falhas raras acontecem — o que não toleram é uma inconsistência silenciosa.

Exibindo uma notificação de erro em caso de falha

Depois de fazer a reversão, exiba uma mensagem de erro: "Não foi possível salvar as alterações. Tente novamente." com um botão "Tentar novamente" que execute a mesma mutação outra vez. Isso dá autonomia aos usuários. A combinação de reversão + notificação de erro + nova tentativa trata o caso de falha de forma adequada, sem bloquear toda a interface.

O problema do ID temporário

Ao adicionar um novo item de forma otimista, o servidor ainda não atribuiu um ID real. Crie um ID temporário para o item otimista: const tempId = crypto.randomUUID(). Use-o como chave do item na lista. Depois que a API responder com sucesso, substitua o ID temporário pelo ID real atribuído pelo servidor.

Reconciliando IDs temporários

Depois de uma mutação de criação bem-sucedida, o servidor responde com o ID real. Atualize o estado para substituir o item temporário: setItems(prev => prev.map(item => item.id === tempId ? { ...item, id: serverResponse.id } : item)). Essa reconciliação garante que as operações seguintes usem o ID correto do servidor.

O problema da condição de corrida

Se o usuário iniciar duas mutações em rápida sucessão, as respostas poderão chegar fora de ordem. A resposta da segunda mutação pode chegar antes da primeira, e a reversão da primeira pode substituir o estado correto resultante da segunda. Essa é uma condição de corrida específica das interfaces otimistas.

Serialização de mutações para evitar condições de corrida

Uma solução para condições de corrida é serializar as mutações usando uma fila. Enquanto uma mutação estiver em andamento, desative o botão acionador (definindo o estado isSubmitting como verdadeiro). Permita a próxima mutação somente depois que a anterior for concluída. Isso sacrifica parte da capacidade de resposta, mas garante a ordem correta do estado.

Padrão de exclusão otimista

Para operações de exclusão: capture os itens anteriores, filtre o item excluído do estado, chame a API de exclusão e reverta em caso de falha. A exclusão é mais simples que a criação (não há reconciliação de ID), mas os mesmos princípios se aplicam. Considere adicionar um breve atraso antes da exclusão (exibindo uma opção de "desfazer") antes de fazer a chamada à API.

ID temporário em atualizações otimistas

Por que os itens adicionados de forma otimista precisam de um ID temporário?

Revisão da lição: atualizações otimistas manuais

O padrão manual: capture previousItems, use setItems com o novo estado, faça a chamada à API, reverta em caso de falha usando setItems(previousItems) e mostre um erro. Para adições, use crypto.randomUUID() como ID temporário e faça a reconciliação com o ID do servidor em caso de sucesso. Evite condições de corrida desativando o acionador durante as mutações em andamento. Reversão + notificação + nova tentativa é a experiência de usuário padrão para falhas.

Perguntas Frequentes

A aula “Implementando atualizações otimistas manualmente” é grátis?

Sim — o texto completo de “Implementando atualizações otimistas manualmente” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.

O que vou aprender em “Implementando atualizações otimistas manualmente”?

Aplique o estado otimista localmente, enfileire a mutação e trate explicitamente os casos de sucesso e falha. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar React Academy?

Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Implementando atualizações otimistas manualmente”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de React Academy?

Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. O que é uma interface otimista e quando usá-la
  2. Implementando atualizações otimistas manualmente
  3. Reversão em caso de erro e resolução de conflitos
  4. Padrões otimistas com React Query e Zustand
← Voltar para React Academy