0Pricing
React Academy · Aula

Reversão em caso de erro e resolução de conflitos

Restaure o estado anterior quando uma mutação falhar e trate adequadamente as alterações otimistas rejeitadas pelo servidor.

Reversão em caso de erro e resolução de conflitos é uma aula grátis de React Academy no CoddyKit. Esta é a aula 3 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.

A complexidade da reversão aumenta conforme o tipo de mutação

Reverter uma adição otimista (remover o item) ou uma exclusão (restaurar o item) é simples. Reverter uma atualização é mais complexo: é preciso restaurar o valor anterior exato. Se o item tiver sido atualizado várias vezes de forma otimista, será necessário acompanhar cada valor anterior separadamente, não apenas o estado original do servidor.

O cenário de conflito em uma atualização

Considere este cenário: o servidor tem um item com valor Z. Você o atualiza de forma otimista para X. Enquanto sua solicitação está em andamento, outro usuário atualiza o mesmo item para Y no servidor. Sua solicitação chega, e o servidor a rejeita (conflito). O alvo da sua reversão é Z, mas o estado atual do servidor é Y. Restaurar Z substituiria Y incorretamente.

Buscar novamente em caso de erro como padrão seguro

A estratégia mais segura para reverter atualizações é buscar novamente o item no servidor após qualquer erro de mutação, em vez de restaurar uma captura armazenada localmente. Isso garante que você exiba o estado oficial do servidor, independentemente do que outros usuários possam ter alterado simultaneamente. Buscar novamente é mais lento, mas sempre correto.

Código de status HTTP 409 Conflito

Uma API bem projetada retorna HTTP 409 Conflito quando uma atualização otimista falha devido a uma modificação simultânea. O corpo da resposta normalmente inclui o estado atual do servidor. Seu manipulador de erros deve detectar 409, usar o corpo da resposta para atualizar o estado local com o valor atual do servidor e informar ao usuário que as alterações não foram salvas.

Idempotência para novas tentativas seguras

Uma mutação idempotente produz o mesmo resultado quando aplicada várias vezes. Projetar mutações para serem idempotentes (usando PUT em vez de POST, incluindo o estado completo do recurso e usando chaves de idempotência) torna seguro tentar novamente após uma falha, sem risco de aplicar a alteração duas vezes. Isso simplifica significativamente a lógica de reversão.

Desduplicação com isSubmitting

Cliques duplos em um botão de envio podem disparar duas mutações idênticas. Evite isso com um sinalizador isSubmitting: defina-o como verdadeiro quando a mutação começar e redefina-o quando ela terminar (tanto em caso de sucesso quanto de falha). Desative o elemento acionador quando isSubmitting for verdadeiro. Isso elimina mutações duplicadas no nível da interface.

Chaves de idempotência para desduplicação no servidor

Para fazer a desduplicação no servidor, inclua um cabeçalho exclusivo Idempotency-Key em cada solicitação de mutação. Gere-o com crypto.randomUUID() quando o usuário iniciar a ação. O servidor detecta chaves duplicadas e retorna a mesma resposta da solicitação original sem reaplicar a operação.

Indicadores de consistência eventual

Enquanto uma mutação estiver em andamento, você pode exibir um indicador sutil de que o estado otimista ainda não foi confirmado: um pequeno ponto pulsante, o texto "Salvando..." ou uma opacidade reduzida no item. Isso comunica a incerteza sem bloquear a interação. Remova o indicador em caso de sucesso ou faça a reversão em caso de falha.

Limites de erro para falhas de mutações

Erros inesperados na lógica de reversão (por exemplo, acessar propriedades de um valor indefinido durante a restauração do estado) podem fazer o componente falhar. Envolva componentes que usam muitas mutações em um limite de erro para que falhas catastróficas na reversão exibam uma interface de erro adequada em vez de uma tela em branco. Registre esses erros para depuração.

Versionamento para detecção de conflitos

Uma estratégia confiável de detecção de conflitos é incluir um número de versão ou ETag em cada mutação. O servidor compara a versão enviada pelo cliente com a versão atual. Se forem diferentes (outra atualização ocorreu), ele retorna 409. Esse é o controle de concorrência otimista: você presume que não haverá conflito, mas o detecta quando ele ocorre.

Testando caminhos de reversão

A lógica de reversão costuma não ser testada porque é difícil simular falhas de rede. Use ferramentas como Mock Service Worker (MSW) para retornar respostas de erro nos testes. Escreva testes explícitos para: tratamento do conflito 409, reversão após tempo limite da rede, desduplicação de cliques duplos e consistência do estado após uma falha. É nesses casos extremos que os defeitos se escondem.

Código de status HTTP para detecção de conflitos

Qual código de status HTTP uma API bem projetada retorna quando uma atualização otimista falha devido a uma modificação simultânea feita por outro usuário?

Revisão da lição: reversão e conflitos

Reverter uma atualização é mais complexo que reverter uma adição ou exclusão — sempre faça uma nova busca em caso de erro para evitar problemas causados por capturas obsoletas. HTTP 409 Conflito sinaliza falhas de concorrência otimista; use o corpo da resposta para restaurar o estado atual do servidor. Projete mutações idempotentes para permitir novas tentativas seguras. Evite disparos duplos usando isSubmitting e chaves de idempotência no servidor. Teste explicitamente os caminhos de reversão usando MSW para simular erros.

Perguntas Frequentes

A aula “Reversão em caso de erro e resolução de conflitos” é grátis?

Sim — o texto completo de “Reversão em caso de erro e resolução de conflitos” é 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 “Reversão em caso de erro e resolução de conflitos”?

Restaure o estado anterior quando uma mutação falhar e trate adequadamente as alterações otimistas rejeitadas pelo servidor. 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 3 de 4.

Quanto tempo leva a aula “Reversão em caso de erro e resolução de conflitos”?

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