Skip to content
Docs
Argumentos

Argumentos

Por defecto, key se pasará a fetcher como argumento. Así que las siguientes 3 expresiones son equivalentes:

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

Argumentos múltiples

En algunos escenarios, es útil pasar múltiples argumentos (puede pasar cualquier valor u objeto) a la función fetcher. Por ejemplo una solicitud de obtención autorizada:

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

Esto es incorrecto. Dado que el identificador (también la key del caché) de los datos es '/api/user', incluso si el token cambia, SWR seguirá utilizando la misma key y devolverá los datos incorrectos.

En su lugar, puedes utilizar un array como parámetro key, que contiene múltiples argumentos de fetcher:

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

La función fetcher acepta el parámetro key tal cual, y la clave de caché se asociará también al argumento key completo. En el ejemplo anterior, url y token están unidos a la clave de caché.

⚠️

En versiones anteriores (< 2), la función fetcher acepta el parámetro key como argumentos por separado

Pasar objetos

💡

Since SWR 1.1.0, object-like keys will be serialized under the hood automatically.

Digamos que tienes otra función que obtiene datos con un ámbito de usuario: fetchWithUser(api, user). Puedes hacer lo siguiente:

const { data: user } = useSWR(['/api/user', token], fetchWithToken)
 
// ...y luego pasarlo como argumento a otro useSWR "hook"
const { data: orders } = useSWR(user ? ['/api/orders', user] : null, fetchWithUser)

Puedes pasar directamente un objeto como clave, y fetcher también recibirá ese objeto:

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

En versiones anteriores (< 1.1.0), SWR compara superficialmente (shallowly) los argumentos en cada renderización, y activa la revalidación si alguno de ellos ha cambiado.