【React.js/Next.js】SWR + Redux Toolkit 完全入門

React.js / Next.js

SWR って、どんな機能があるのかな?

今回は、React.js でデータ取得をシンプルにしてくれるライブラリ SWR について、
基本的な考え方から実際の使い方、さらに Redux Toolkit と組み合わせた実践的なユースケース までをわかりやすく解説します。

React.js の環境構築がまだの場合は、下記より環境構築を行なってください。

SWR とは?

SWR とは React.js でのデータ取得をシンプルにしてくれる React Hooks ライブラリ のことで、API からデータを取得する ときに発生しがちな 読み込み中の表示エラー時の処理
最新データの取得 といった処理を 自動で行ってくれます

そのため、useEffectuseState を使った複雑なコードを書かなくても、
少ないコードで直感的かつ安全にデータ取得を実装することができます。

SWR の名前とデータ取得の流れ

SWR という名前は、Stale-While-Revalidate の略で、「古いデータを一旦表示しつつ、裏側で最新のデータを取得する」という考え方を表しています。

SWR では、データ取得が次のような流れで行われます。

  1. 最初に、以前取得して キャッシュされているデータを画面に表示 する
  2. 同時に、API から 最新のデータを取得 する
  3. 最新データが取得 できたら、自動で画面を更新 する

この仕組みによって、表示の速さとデータの新しさ を両立することができ、ユーザーは待ち時間を感じにくく、開発者はデータ更新の処理を意識せずに実装することができます。

SWR のインストールと基本的な使い方

それでは、ここから実際に SWRインストール したり、コンポーネントで利用する 基本的な流れを見ていきましょう。

SWR のインストール

SWRインストール します

SWR 基本的な使い方

useSWR

SWR は React でのデータ取得を支援するライブラリのことで、
useSWRSWR が提供している 実際にデータ取得を行うためのフック です。

コード例

処理内容

  1. こんにちは Leanne Graham” と表示されている
  2. 一瞬 “Loading…” の文字が表示され、また “こんにちは Leanne Graham” と 再表示 される

SWR + Redux Toolkit と連携したユースケース

SWR + Redux Toolkit の構成

役割分担

Redux ToolkitSWR を組み合わせる場合は、それぞれの役割を明確に分けることが重要です。

  • Redux Toolkit
    アプリ全体で共有 したい ログイン情報 や、選択中のデータなどの状態を管理します。
  • SWR
    API からの データ取得やキャッシュ、自動更新の処理を管理 し、常に最新のデータ を扱います。
  • mutate
    SWR保持しているキャッシュを最新の状態に更新するため に使用します。
    Redux Toolkit の状態 APIのデータを同期したい場合 に、重要な役割 を持ちます。

メリット

この構成の メリット として、データ更新時の流れが次のように整理されます。

  1. API を呼び出してサーバー側のデータを更新 する
  2. mutate() を使って SWR のキャッシュを更新し、画面を即座に最新化 する
  3. Redux Toolkitdispatch して、アプリ全体の状態を更新 する

このように、「API更新 → 画面更新 → Redux Toolkit 共有」という流れが明確になるため、状態管理 が複雑になりにくく、安全に実装できます。

mutate とは?

mutate とは、SWRキャッシュしているデータを手動で更新・再取得するための関数 です。
API でデータを更新したあとmutate() を呼ぶことで、画面に表示されているデータを最新の状態にできます。

SWR + Redux Toolkit のコード例

Redux Toolkit について

Redux Toolkit について、下記の記事でも詳しく紹介している為、参考にしてみてください。

Slice の作成

ユーザー状態(データ)の初期値処理内容 を登録する

Store に Slice の登録・追加

上記の Slice を呼び出せるように、Store に登録する

Provider の設定

上記の Storeアプリ上状態管理 ができるように、Provider を設定する

データの取得・表示・更新

アプリ上 で、状態(データ)の取得・表示・更新 を確認する

処理内容の詳細
  1. APIuser.name を ‘taro‘ に 更新処理 を実行
  2. API 更新後の user データを json化 し、ログ に表示
  3. SWRキャッシュを更新 して画面を再表示
    今回 テスト用の DB が無い為、手動でキャッシュを更新しデータの再検証を無効 にしている
    ※ 通常 DB がある場合、「mutate();」のコードのみで キャッシュの更新とデータの再取得を自動で行ってくれる
  4. Redux Toolkit の状態も更新

処理内容

  • Leanne Graham” と表示されている
  • 名前更新” ボタンで、画面にログに ”taro” と “updateUser Name: taro” が表示される

まとめ

SWR について、mutateRedux Toolkit とあわせて解説してきましたが、いかがでしたでしょうか?

SWRReact.js でのデータ取得をシンプルにしてくれる React Hooks ライブラリ のことで、API からの データ取得やキャッシュ、自動更新といった処理を管理 し、常に最新のデータ を扱えるようにしてくれます。

また SWR保持しているキャッシュを最新の状態に更新する mutateアプリ全体で共有 したい ログイン情報選択中のデータなどの状態を管理 してくれる Redux Toolkit 組み合わせることで、「API 更新 → 画面更新 → Redux Toolkit での共有」 という流れが明確になり、状態管理 が複雑になりにくく、安心して実装を進めることができます。

まずは SWR の基本的な使い方をしっかり押さえ、小さな コンポーネント で試しながら、少しずつ mutateRedux Toolkit を組み合わせて使えるようになっていきましょう。ていきましょう。

公式サイト

SWR

Vercel
React Hooks for Data Fetching.
tachu × tachu

Laravel / React フルスタックエンジニア

Webエンジニア歴15年、フリーランス歴8年で、PHP / Laravel を中心に、
React.js / Vue.js を用いたフルスタックでのWeb開発をしています。

技術記事は Laravel / React / Web開発 を中心に書いています。

Webサービスの開発、既存システム改善、機能追加、技術相談、小規模な開発など、お気軽にご相談ください。

React.js / Next.js
シェアする

コメント

タイトルとURLをコピーしました