Skip to content
Documentação
Argumentos

Argumentos

Por padrão, key será passado para fetcher como argumento. Então as 3 expressões a seguir são equivalentes:

useSWR('/api/user', () => fetcher('/api/user'))
useSWR('/api/user', url => fetcher(url))
useSWR('/api/user', fetcher)

Múltiplos Argumentos

Em alguns cenários, é útil passar vários argumentos (pode ser qualquer valor ou objeto) para a função fetcher. Por exemplo, uma requisição de fetch autorizada:

useSWR('/api/user', url => fetchWithToken(url, token))

Isso é incorreto. Porque o identificador (também a cache key) do dado é '/api/user', mesmo se token mudar, SWR ainda usará a mesma chave e retornará o dado errado.

Ao invés disso, você pode usar um array como o parâmetro key, que contém vários argumentos para a função fetcher.

const { data: user } = useSWR(['/api/user', token], ([url, token]) => fetchWithToken(url, token))

A função fetcher aceita o parâmetro key como é, e a chave de cache também será associada com o argumento key inteiro. No exemplo acima, url e token estão associados à chave de cache.

⚠️

Em versões antigas (< 2), a função fetcher aceita o parâmetro key como argumentos separadamente

Passando Objetos

💡

Desde a versão 1.1.0, chaves de objeto serão serializadas por baixo dos panos automaticamente.

Digamos que você tenha outra função que busca dados com um escopo de usuário: fetchWithUser(api, user). Você pode fazer o seguinte:

const { data: user } = useSWR(['/api/user', token], fetchWithToken)
 
// ...e então passá-lo como argumento para outro hook useSWR
const { data: orders } = useSWR(user ? ['/api/orders', user] : null, fetchWithUser)

Você pode passar diretamente um objeto como chave, e fetcher receberá esse objeto também:

const { data: orders } = useSWR({ url: '/api/orders', args: user }, fetcher)
⚠️

Em versões antigas (< 1.1.0), SWR compara os argumentos superficialmente em cada renderização e aciona a revalidação se algum deles foi alterado.