import useSWR from 'swr'
 
function Profile() {
  const { data, error, isLoading } = useSWR('/api/user', fetcher)
 
  if (error) return <div>failed to load</div>
  if (isLoading) return <div>loading...</div>
  return <div>hello {data.name}!</div>
}

概要

  • 第一引数では通常APIのURL、第二引数ではfetcherという関数
  • fetcherは任意の非同期関数でネイティブのfetchやAxiosのようなツールを使用据えうことができる
  • data/isLoading/errorの3つの値を返す

特徴

  • コードが簡潔になる
  • 速い、軽量、再利用可能なデータ取得
  • 重複リクエストがなくなる
    SWRキー(fetchURL)が同じ場合ほぼ同時にレンダリングされるため、たった一度のネットワークリクエストのみが行われる
  • 自動再検証
    ページにフォーカスを合わせるかタブを切り替えたり、ユーザーがオンラインになったりSWRは自動的にデータを再検証する

useSWRImmutable

useSWRでは自動で再検証を行うので、タブを切り替えたりすると自動にデータを再検証し、画面の内容を常に最新の状態に保つことができる。しかし、そこまでデータを最新にする必要がない場合、無駄なデータ更新を増やしてしまう。データの再検証を無効化して再フェッチしないようにしたい場合は、useSWRImmutableを使用するとよい。

useSWRMutation

任意のタイミングでデータ取得をしたい場合、(今回onClickイベントが走った際にデータ取得したかった)SWRMutationを使用する。useSWRではレンダリングがされた時点でデータが取得されてしまうのでそちらを回避するため。
返り値のtriggerと呼ばれるhookを呼び出すことで初めてミューテーションが行われる。

【参考】https://weseek.co.jp/tech/4181/

c.sakyou

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA