Mutação e atualizações otimistas com SWR
Use mutate() e useSWRMutation para operações de escrita com interface otimista e reversão automática.
Mutação e atualizações otimistas com SWR é 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.
mutate: revalidação por chave
A função mutate global do SWR permite acionar a revalidação de qualquer chave do cache de qualquer lugar da aplicação: mutate('/api/user') faz com que todos os hooks useSWR('/api/user') busquem os dados novamente.
Importe-a com: import { mutate } from 'swr'. Isso é útil para invalidar dados após uma ação do servidor fora de um componente que tenha acesso direto à função mutate associada.
mutate com dados: atualizações do cache sem nova busca
Passe dados como segundo argumento para mutate: mutate('/api/user', updatedUser) define imediatamente o cache como updatedUser, sem fazer uma solicitação de rede. Isso às vezes é chamado de mutação local.
Adicione { revalidate: false } como terceiro argumento para impedir que SWR faça uma nova busca após a atualização otimista.
useSWRMutation: para acionamentos explícitos
useSWRMutation foi projetado para mutações iniciadas pelo usuário (envios de formulários, cliques em botões), em oposição à busca automática. Ele não é executado durante a montagem; é executado somente quando você chama trigger().
Importe-o de swr/mutation: const { trigger, isMutating, data, error } = useSWRMutation('/api/post', sendRequest).
Assinatura da função de busca de useSWRMutation
A função de busca de useSWRMutation recebe (key, { arg }), em que arg é o valor passado a trigger(). Exemplo: async (url, { arg: newPost }) => fetch(url, { method: 'POST', body: JSON.stringify(newPost) }).
Chame trigger({ title: 'New Post', content: '...' }) para executar a mutação com os dados da publicação como arg.
Estado de isMutating
isMutating de useSWRMutation é true enquanto a solicitação da mutação está em andamento. Utilize-o para desativar botões de envio e exibir indicadores de carregamento durante a solicitação, evitando envios duplicados.
Isso substitui a variável de estado isSubmitting que, de outro modo, teria de ser gerenciada com useState.
Explicação das atualizações otimistas
Uma atualização otimista aplica imediatamente à interface o resultado esperado, antes que o servidor confirme a alteração. Se o servidor for bem-sucedido, nada mais será necessário. Se falhar, a atualização será revertida para o estado anterior.
Esse padrão faz as interfaces parecerem instantâneas: um botão de curtir parece ser pressionado imediatamente, sem esperar a resposta do POST.
Atualizações otimistas com SWR
Utilize mutate(key, newData, { optimisticData: optimisticValue, rollbackOnError: true }). O SWR define imediatamente o cache como optimisticValue, envia a solicitação de revalidação e reverte para o valor anterior se a solicitação gerar uma exceção.
A opção rollbackOnError: true é essencial para garantir a correção: sem ela, uma mutação malsucedida deixa dados otimistas obsoletos no cache.
Reversão automática em caso de erro
Quando rollbackOnError: true está definido e a mutação é rejeitada, o SWR restaura automaticamente o cache para o instantâneo obtido antes da atualização otimista. Não é necessário escrever código manual de reversão.
Além disso, defina populateCache: false se o corpo da resposta da mutação não tiver o mesmo formato dos dados de useSWR, para impedir que a resposta atualize o cache incorretamente.
mutate vinculado versus mutate global
useSWR retorna um mutate vinculado: const { data, mutate } = useSWR('/api/user', fetcher). Esse mutate vinculado direciona-se automaticamente à chave '/api/user'; não é necessário informar a chave novamente.
Utilize o mutate vinculado dentro dos componentes responsáveis pela exibição dos dados. Utilize o mutate global do swr quando precisar invalidar uma chave a partir de um componente não relacionado ou de uma função utilitária.
Comparação com as mutações do React Query
useMutation do React Query tem um padrão semelhante de trigger/isMutating. Principais diferenças: o retorno de chamada onSuccess do React Query com queryClient.invalidateQueries é o padrão idiomático de invalidação do cache. O SWR utiliza diretamente a função mutate para atualizar o cache.
Ambos oferecem suporte a atualizações otimistas e reversão, mas o formato da API é diferente. Equipes proficientes em uma delas podem aprender a outra rapidamente.
Estratégia de cache após a mutação
Depois de uma mutação bem-sucedida, há três opções: fazer uma nova busca chamando mutate(key), atualizar o cache com o corpo da resposta (se a API retornar o recurso atualizado) ou combinar as duas abordagens com atualizações otimistas e revalidação.
Para mutações em listas (como adicionar um item), atualize manualmente o cache para acrescentar o novo item e depois faça a revalidação para confirmar o estado no servidor. Isso evita uma nova busca completa da lista e mantém os dados consistentes.
Reversão de atualização otimista
Qual opção deve ser definida em mutate do SWR para reverter automaticamente uma atualização otimista em caso de erro?
Recapitulação da lição
mutate(key) aciona a revalidação; mutate(key, data) atualiza o cache sem fazer uma nova busca. useSWRMutation gerencia mutações explícitas acionadas pelo usuário com trigger(), o estado isMutating e suporte a extraArg. As atualizações otimistas com optimisticData e rollbackOnError: true fazem as interfaces parecerem instantâneas, com recuperação automática após erros.
O mutate vinculado de useSWR direciona-se à própria chave; o mutate global de swr funciona em qualquer lugar.
Perguntas Frequentes
A aula “Mutação e atualizações otimistas com SWR” é grátis?
Sim — o texto completo de “Mutação e atualizações otimistas com SWR” é 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 “Mutação e atualizações otimistas com SWR”?
Use mutate() e useSWRMutation para operações de escrita com interface otimista e reversão automática. 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 “Mutação e atualizações otimistas com SWR”?
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
- Conceitos fundamentais do SWR: obsoleto enquanto revalida
- Hook useSWR: busca, carregamento e estados de erro
- Mutação e atualizações otimistas com SWR
- SWR versus React Query: escolhendo a ferramenta certa