Skip to content
ドキュメント
引数

引数

デフォルトで key は引数として fetcher に渡されます。したがって、次の三つの式は同等です:

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

複数の引数

一部のシナリオでは、fetcher 関数に複数の引数(任意の値またはオブジェクト)を渡すと便利です。 たとえば、認証されたフェッチリクエスト:

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

これは正しくありません。データの識別子(キャッシュキーも) '/api/user' であるため、 token が変更された場合でも、SWR は同じキーを使用してしまい間違ったデータを返します。

代わりに、fetcher の複数の引数を含む配列key パラメーターとして使用できます。

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

fetcher 関数は key パラメータをそのまま受け取り、キャッシュキーもまた key の引数全てと関連づけられます。上記の例では urltoken の組み合わせがキャッシュキーとなります。

⚠️

In older versions (< 2), The fetcher function accepts the key parameter as arguments separately

オブジェクトの受け渡し

💡

SWR 1.1.0 からは、オブジェクトのようなキーは内部で自動的にシリアライズされます。

あるユーザースコープでデータを取得する別の関数があるとします: fetchWithUser(api, user)。その場合、以下のようにできます:

const { data: user } = useSWR(['/api/user', token], fetchWithToken)
 
// ...次に、それを引数として別の useSWR フックに渡します
const { data: orders } = useSWR(user ? ['/api/orders', user] : null, fetchWithUser)

オブジェクトをキーとして直接渡すことができ、fetcher はそのオブジェクトを受け取ります:

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

古いバージョン(< 1.1.0)では、SWR はすべてのレンダリングで引数を浅く比較し、いずれかが変更された場合は再検証を実行します。