Padrões otimistas com React Query e Zustand
Use os retornos de chamada onMutate/onError/onSettled do React Query e o Zustand para fluxos estruturados de interfaces otimistas.
Padrões otimistas com React Query e Zustand é uma aula grátis de React Academy no CoddyKit. Esta é a aula 4 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.
Visão geral de useMutation do React Query
O gancho useMutation do React Query oferece infraestrutura integrada para atualizações otimistas por meio de três retornos de chamada do ciclo de vida: onMutate (é acionado antes da mutação e retorna um objeto de contexto), onError (é acionado em caso de falha e recebe o contexto) e onSettled (é acionado em caso de sucesso ou falha). Essa estrutura foi criada especificamente para padrões otimistas.
onMutate: a fase da atualização otimista
Em onMutate, você executa três etapas: primeiro, cancela todas as consultas em andamento dos dados afetados (await queryClient.cancelQueries({ queryKey })); depois, captura o cache atual (queryClient.getQueryData(queryKey)); por fim, aplica a atualização otimista ao cache (queryClient.setQueryData(queryKey, updater)). Retorne a captura como contexto.
onError: revertendo com contexto
O retorno de chamada onError recebe o erro, as variáveis da mutação e o contexto retornado por onMutate. Use o contexto para reverter: queryClient.setQueryData(queryKey, context.previousData). O contexto é a ponte entre a captura feita em onMutate e a reversão em onError.
onSettled: buscando novamente para sincronizar
O retorno de chamada onSettled é acionado independentemente de a operação ter sido concluída com sucesso ou falhado. Use-o para buscar novamente a consulta e sincronizar com o estado do servidor: queryClient.invalidateQueries({ queryKey }). Isso garante que, após qualquer mutação — seja ela bem-sucedida (o servidor pode ter transformado os dados) ou malsucedida (a reversão foi concluída) —, você eventualmente convergirá para a verdade do servidor.
Alternância otimista de tarefa com React Query
Um exemplo prático: alternar o estado de conclusão de uma tarefa. Em onMutate, faça uma captura da lista de tarefas e atualize a tarefa específica no cache. Em onError, restaure a captura a partir do contexto. Em onSettled, invalide a consulta de tarefas para buscá-la novamente. O usuário vê a alternância instantaneamente; o servidor é sincronizado em segundo plano.
Atualizações otimistas com Zustand
Em uma loja Zustand, as atualizações otimistas são simples: crie uma ação updateItem(id, changes) que atualize imediatamente o item na loja e depois chame a API. Se a API falhar, chame outra ação revertItem(id, previousState). As atualizações síncronas de estado do Zustand tornam a etapa otimista instantânea.
Immer com Zustand para atualizações complexas
Ao atualizar de forma otimista um estado profundamente aninhado do Zustand, use o produce do Immer para obter mutações mais limpas: set(produce(state => { state.items[id] = { ...state.items[id], ...changes } })). O Immer gerencia atualizações imutáveis com uma sintaxe mutável, tornando as alterações complexas em estados aninhados legíveis e seguras.
Gancho useOptimistic do React 19
O React 19 introduziu useOptimistic(state, updateFn) como um gancho integrado para atualizações otimistas em ações do servidor. const [optimisticState, addOptimistic] = useOptimistic(items, (state, newItem) => [...state, newItem]). Chamar addOptimistic(newItem) atualiza imediatamente a interface enquanto a ação do servidor é executada de forma assíncrona.
Reversão automática com useOptimistic
useOptimistic gerencia a reversão automaticamente. Quando a ação do servidor é concluída (com sucesso ou com um erro), o React reverte o estado otimista e aplica o estado real do servidor. Você não precisa escrever uma lógica manual de reversão — o React gerencia o ciclo de vida da atualização otimista durante o limite de Suspense da ação.
Comparação das três abordagens
As atualizações otimistas manuais oferecem controle total, mas exigem código repetitivo. React Query onMutate/onError/onSettled integra-se ao cache de consultas para fazer a sincronização automática. useOptimistic é a opção mais simples para ações do servidor, mas requer React 19 e uma arquitetura de ações do servidor. Escolha com base na sua camada de dados: manual para estados locais simples, React Query para APIs REST e useOptimistic para RSC/ações do servidor.
Escolhendo o padrão certo
Considere sua arquitetura ao escolher um padrão otimista. Se você usa React Query em toda a aplicação, o padrão onMutate é consistente e tem conhecimento do cache. Se usa Zustand para o estado global, o padrão baseado em ações se encaixa naturalmente. Se está usando React 19 com ações do servidor, useOptimistic é a escolha idiomática. Misturar padrões em uma mesma aplicação é comum e aceitável.
Valor de retorno de onMutate no React Query
O que o retorno de chamada onMutate deve retornar no React Query para permitir a reversão em onError?
Revisão da lição: padrões otimistas
useMutation do React Query usa onMutate (cancela consultas, faz uma captura, aplica a atualização otimista e retorna o contexto), onError (restaura a captura a partir do contexto) e onSettled (invalida para buscar novamente). As atualizações otimistas do Zustand chamam a ação de estado imediatamente e depois a API, revertendo em caso de falha. useOptimistic do React 19 oferece reversão automática em ações do servidor. Escolha o padrão que se adapta à arquitetura da sua camada de dados.
Perguntas Frequentes
A aula “Padrões otimistas com React Query e Zustand” é grátis?
Sim — o texto completo de “Padrões otimistas com React Query e Zustand” é 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 “Padrões otimistas com React Query e Zustand”?
Use os retornos de chamada onMutate/onError/onSettled do React Query e o Zustand para fluxos estruturados de interfaces otimistas. 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 4 de 4.
Quanto tempo leva a aula “Padrões otimistas com React Query e Zustand”?
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
- O que é uma interface otimista e quando usá-la
- Implementando atualizações otimistas manualmente
- Reversão em caso de erro e resolução de conflitos
- Padrões otimistas com React Query e Zustand