Skip to content
Documentação
Revalidação

Revalidação Automática

💡

Se você quer validar manualmente os dados, verifique Mutação.

Revalidar ao Focar

Quando você focar novamente ou trocar de aba, SWR revalidará automaticamente os dados.

Isso pode ser útil para sincronizar imediatamente para o último estado. Isso é útil em situações como abas de celular obsoletas, ou laptops que ficaram em modo descanso.

Video: usando revalidação de foco para sincronizar automaticamente o estado de login entre páginas.

Essa funcionalidade é habilitada por padrão. Você pode desabilitá-la pela opção revalidateOnFocus.

Revalidar em Intervalos

Em vários casos, os dados mudam graças a diversos dispositivos, diversos usuários, diversas abas. Como podemos atualizar o estado de forma dinâmica?

SWR lhe dará a opção de revalidar automaticamente. É inteligente, o que significa que o refetch só ocorrerá se o componente associado ao hook estiver visível em tela.

Video: quando um usuário realiza uma mudança, ambas sessões irão eventualmente renderizar os mesmos dados.

Você pode habilitá-lo definindo um valor para refreshInterval:

useSWR('/api/todos', fetcher, { refreshInterval: 1000 })

Existem também opções como refreshWhenHidden e refreshWhenOffline. Ambas são desabilitados por padrão, então SWR não fará fetch quando a página não estiver na tela, ou não houver conexão com a internet.

Revalidar ao Reconectar

É útil também revalidar quando o usuário volta a ter uma conexão. Esse cenário acontece muitas vezes quando o usuário desbloqueia o computador, mas a internet ainda não está conectada no momento.

Para ter certeza que os dados estão sempre atualizados, SWR revalidará automaticamente quando a rede for recuperada.

Essa funcionalidade é habilitada por padrão. Você pode desabilitá-la pela opção revalidateOnReconnect.

Desabilitar Revalidações Automáticas

Se o recurso é imutável, que nunca mudará se revalidarmos novamente, podemos desabilitar todas as revalidações automáticas para ele.

Desde a versão 1.0, SWR fornece um hook useSWRImmutable para marcar o recurso como imutável:

import useSWRImmutable from 'swr/immutable'
 
// ...
useSWRImmutable(key, fetcher, options)

Ele possui a mesma interface de API do hook useSWR normal. Você também pode fazer o mesmo desabilitando as seguintes opções de revalidação:

useSWR(key, fetcher, {
  revalidateIfStale: false,
  revalidateOnFocus: false,
  revalidateOnReconnect: false
})
 
// equivalente a
useSWRImmutable(key, fetcher)

O revalidateIfStale controla se SWR deve revalidar quando ele é montado e há dados desatualizados.

Esses 2 hooks acima fazem o mesma coisa. Uma vez que os dados são armazenados, eles nunca mais pedirão para obtê-los novamente.

Revalidando durante a Montagem

É útil sobrescrever a revalidação do SWR durante a montagem. Por padrão, o valor de revalidateOnMount é definido como indefinido.

O hook SWR monta seguindo:

  • Primeiro, ele checa se revalidateOnMount está definido. Ele inicia a requisição se for verdadeiro e para se for falso.

revalidateIfStale é útil para controlar o comportamento de montagem. Por padrão, revalidateIfStale é definido como true.

Se revalidateIfStale estiver definido como verdadeiro, ele só fará o refetch se houver algum dado em cache, caso contrário, não fará o refetch.