小松崎鉄雄
SWRについて(初めの学び)
2026年01月24日
要約を生成中...
<まとめ>
SWRの領域は、フロントエンドでのデータ取得と状態管理。
結論、基礎理解としてuseEffectとfetcherを理解できたなら、SWRを使ったほうがメリットが大きい
<変更箇所>
useEffect+fetcherで管理していた箇所
useEffect(() => {
fetch('/api/admin/posts')
}, [])
<SWRがやること>
APIを呼ぶ
useSWR('/api/admin/posts', fetcher)
ここで、SWRは内部でfetcher('/api/admin/posts') を呼んでいる
取得したデータをメモリ上に保存
useSWR('/api/admin/posts', fetcher)
メモリ上に保存(キャッシュ)していることにより、同じページに戻ったら即表示、画面遷移しても再取得しない、UXが速くなるメリットがある。
ローディング管理
const { data, isLoading } = useSWR(...)
初回アクセス時、キャッシュが存在しないとき、再フェッチ中はisLoadingがtrueになる。これにより、const [loading, setLoading] = useState(false)が不要になる。
エラー管理
const { error } = useSWR(...)
fetcher 内で throw されたエラーを補足し、errorとして提供する(エラー典型例:ネットワークエラー、401/500エラー、JSONparseエラー)、これにより、try/catchをUI側に書かなくていい。
再フェッチ(自動)
SWR は「データが古くなりそう」と判断すると 自動で再取得。画面にもどってきたときやブラウザがフォーカスされたとき、ネットワーク復帰時、mutate()を呼んだときなど。
mutate('/api/admin/posts')
これにより、更新後に一覧を再取得が1行で書けるようになる
同じAPIの重複リクエスト防止
→同じkeyを使うuseSWRが複数あってもfetcher は1回しか実行されない
<SWRがやらないこと>
DBアクセス
API実装(route.ts)
認証/認可ロジック
レスポンス内容の定義
<useEffect + fetcher vs SWR 比較表>
観点 | useEffect + fetcher | SWR |
|---|---|---|
主な役割 | データ取得を自分で実装 | データ取得+状態管理を自動化 |
実装量 | 多い(毎回同じコード) | 少ない(1行で取得) |
状態管理 | useState が必要 | 不要(SWR内部) |
ローディング管理 | 自前実装 | isLoading で提供 |
エラー管理 | 自前実装 | error で提供 |
キャッシュ | なし | あり(強力) |
再フェッチ | 手動 | 自動 |
画面復帰時更新 | 自前 | 自動 |
重複リクエスト | 発生しやすい | 防止される |
UX | 普通 | 良い(速く見える) |
学習コスト | 低い | 中 |
デバッグ | しやすい | 最初は追いづらい |
向いている場面 | 学習・小規模 | 実務・中〜大規模 |
route.ts への影響 | なし | なし |
要約
コメント
まだコメントはありません。