Redux Toolkitを使い始める
目的
Redux Toolkitパッケージは、Reduxロジックを記述するための標準的な方法として設計されています。これはもともと、Reduxに関する3つの一般的な懸念事項に対処するために作成されました。
- "Reduxストアの設定が複雑すぎる"
- "Reduxで何か役に立つことをするには、多くのパッケージを追加する必要がある"
- "Reduxはボイラープレートコードが多すぎる"
create-react-app
の精神にのっとり、設定プロセスを抽象化し、最も一般的なユースケースを処理するツールを提供し、ユーザーがアプリケーションコードを簡素化できるいくつかの便利なユーティリティを含めることで、すべてのユースケースを解決することはできませんが、試みています。
Redux Toolkitには、"RTK Query"と呼ばれる強力なデータ取得およびキャッシング機能も含まれています。これは、別々のエントリポイントのセットとしてパッケージに含まれています。オプションですが、データ取得ロジックを手動で記述する必要性を排除できます。
これらのツールは、すべてのReduxユーザーにとって有益です。初めてのプロジェクトを設定する全く新しいReduxユーザーであっても、既存のアプリケーションを簡素化したい経験豊富なユーザーであっても、Redux ToolkitはReduxコードの改善に役立ちます。
インストール
React Reduxアプリの作成
ReactとRedux Toolkitを使用して新しいアプリを始める推奨される方法は、公式のRedux Toolkit + TSテンプレート for Viteを使用するか、Next.jsのwith-redux
テンプレートを使用して新しいNext.jsプロジェクトを作成することです。
これら両方のテンプレートでは、Redux ToolkitとReact-Reduxがそのビルドツールに適した方法で既に構成されており、Redux Toolkitのいくつかの機能の使い方を示す小さなサンプルアプリが付属しています。
# Vite with our Redux+TS template
# (using the `degit` tool to clone and extract the template)
npx degit reduxjs/redux-templates/packages/vite-template-redux my-app
# Next.js using the `with-redux` template
npx create-next-app --example with-redux my-app
現在、公式のReact Nativeテンプレートはありませんが、標準的なReact NativeとExpoにはこれらのテンプレートを推奨します。
- https://github.com/rahsheen/react-native-template-redux-typescript
- https://github.com/rahsheen/expo-template-redux-typescript
既存のアプリ
Redux Toolkitは、モジュールバンドラーまたはNodeアプリケーションで使用するために、NPMのパッケージとして利用できます。
- npm
- yarn
npm install @reduxjs/toolkit
Reactバインディングが必要な場合
npm install react-redux
yarn add @reduxjs/toolkit
Reactバインディングが必要な場合
yarn add react-redux
このパッケージには、ブラウザで<script type="module">
タグとして直接使用できる、事前にコンパイルされたESMビルドが含まれています。
含まれるもの
Redux Toolkitには、これらのAPIが含まれています。
configureStore()
:簡素化された構成オプションと優れたデフォルトを提供するためにcreateStore
をラップします。スライスreducerを自動的に組み合わせ、指定したReduxミドルウェアを追加し、デフォルトでredux-thunk
を含み、Redux DevTools Extensionの使用を有効にします。createReducer()
:switch文を書く代わりに、アクションタイプとケースreducer関数のルックアップテーブルを指定できます。immer
ライブラリを自動的に使用して、state.todos[3].completed = true
のような通常の変更可能なコードで、より単純な不変の更新を記述できます。createAction()
:指定されたアクションタイプの文字列に対してアクションクリエーター関数を生成します。createSlice()
:reducer関数のオブジェクト、スライス名、初期状態の値を受け取り、対応するアクションクリエーターとアクションタイプを持つスライスreducerを自動的に生成します。combineSlices()
:複数のスライスを単一のreducerに組み合わせ、初期化後にスライスの「遅延読み込み」を可能にします。createAsyncThunk
:アクションタイプの文字列とPromiseを返す関数を受け取り、そのPromiseに基づいてpending/fulfilled/rejected
アクションタイプをディスパッチするthunkを生成します。createEntityAdapter
:ストアで正規化されたデータを管理するための、再利用可能なreducerとセレクターのセットを生成します。- Reselectライブラリからの
createSelector
ユーティリティは、使いやすさのために再エクスポートされています。
RTK Query
RTK Queryは、@reduxjs/toolkit
パッケージ内のオプションのアドオンとして提供されています。これは、データの取得とキャッシングのユースケースを解決するために特別に構築されており、アプリのAPIインターフェースレイヤーを定義するためのコンパクトで強力なツールセットを提供します。これは、ウェブアプリケーションでデータをロードする一般的なケースを簡素化し、データの取得とキャッシングのロジックを手動で記述する必要性を排除することを目的としています。
RTK Queryは、そのアーキテクチャに内部的にReduxを使用し、実装にはRedux Toolkitコアの上に構築されています。ReduxとRTKの知識はRTK Queryを使用するために必要ありませんが、それらが提供する追加のグローバルストア管理機能をすべて検討し、Redux DevToolsブラウザ拡張機能をインストールすることをお勧めします。これはRTK Queryと完全に連携して、リクエストとキャッシュの動作のタイムラインをトラバースおよび再生できます。
RTK Queryは、コアRedux Toolkitパッケージのインストールに含まれています。以下の2つのエントリポイントのいずれかから利用できます。
import { createApi } from '@reduxjs/toolkit/query'
/* React-specific entry point that automatically generates
hooks corresponding to the defined endpoints */
import { createApi } from '@reduxjs/toolkit/query/react'
含まれるもの
RTK Queryには、これらのAPIが含まれています。
createApi()
:RTK Query機能の中核。エンドポイントのセットを定義し、データの取得方法、データの取得と変換方法の構成を含む、一連のエンドポイントからデータを取得する方法を記述できます。ほとんどの場合、これはアプリごとに一度だけ使用し、「ベースURLごとに1つのAPIスライス」というルールに従う必要があります。fetchBaseQuery()
:fetch
をラップした小さなラッパーで、リクエストを簡素化することを目的としています。ほとんどのユーザーがcreateApi
で使用する推奨されるbaseQuery
として意図されています。<ApiProvider />
:Reduxストアがまだない場合、Provider
として使用できます。setupListeners()
:refetchOnMount
とrefetchOnReconnect
の動作を有効にするために使用されるユーティリティです。
RTK Queryの詳細、解決する問題、使用方法については、RTK Query概要ページを参照してください。
Reduxの学習
Reduxの学習に役立つさまざまなリソースをご用意しています。
Redux Essentialsチュートリアル
Redux Essentialsチュートリアルは、「Reduxを正しく使う方法」を教えるトップダウン型のチュートリアルで、最新の推奨APIとベストプラクティスを使用しています。まずはここから始めることをお勧めします。
Redux Fundamentalsチュートリアル
Redux Fundamentalsチュートリアルは、「Reduxの仕組み」を基礎から抽象化なしで、そして標準的なReduxの使用パターンが存在する理由を教えるボトムアップ型のチュートリアルです。
Learn Modern Reduxライブストリーム
ReduxのメンテナーであるMark Eriksonが、「Learn with Jason」ショーに出演し、現代のReduxの使い方を説明しました。このショーでは、TypeScriptでRedux ToolkitとReact-Reduxフック、新しいRTK Queryデータ取得APIを使用する方法を示すライブコーディングされたサンプルアプリが含まれています。
「Learn Modern Redux」ショーのノートページで、トランスクリプトとサンプルアプリソースへのリンクを参照してください。
ヘルプとディスカッション
#reduxチャンネル of the Reactiflux Discordコミュニティは、Reduxの学習と使用に関するすべての質問のための公式リソースです。Reactifluxは、交流し、質問をし、学ぶのに最適な場所です。ぜひご参加ください!
#reduxタグを使用してStack Overflowで質問することもできます。