Redux Toolkit は、アプリケーションで Redux をセットアップするプロセスを簡素化する、独自の意見を持つ強力な公式ライブラリです。 Redux は非常に強力ですが、状態管理、アクションの作成、リデューサーを処理するために多くの定型コードが必要になる場合があります。 Redux Toolkit (RTK) は、一般的なタスクを簡素化する一連のユーティリティ関数を提供することで、Redux 開発をより簡単かつ効率的に行うように設計されています。
Redux Toolkit を使用すると、より簡潔かつ体系的にストアを構成し、リデューサーを作成し、アクションを定義できます。また、開発者がよくある間違いや定型コードを回避するのに役立つデフォルト設定もいくつか含まれています。
Redux Toolkit は、より構造化され、簡潔で、ユーザーフレンドリーな方法で Redux ロジックを作成するための公式の推奨ライブラリです。不変状態の更新を自動的に処理したり、アクションクリエーターとリデューサーを簡素化するなど、Redux セットアップの複雑さを軽減するユーティリティを提供することで、反復的なコードの必要性を排除します。
Redux Toolkit は、Redux の使用を効率化するためのいくつかの組み込み機能とユーティリティを提供します。
configureStore は、非同期アクション用の redux-thunk などの重要なミドルウェアを自動的に追加し、デバッグ用に Redux DevTools をセットアップすることにより、ストア構成を簡素化します。
import { configureStore } from '@reduxjs/toolkit'; import counterReducer from './counterSlice'; const store = configureStore({ reducer: { counter: counterReducer, }, }); export default store;
createSlice は、Redux 状態の一部を表し、リデューサーとアクションの両方を含む Redux スライスの作成を簡素化するユーティリティです。
import { createSlice } from '@reduxjs/toolkit'; const counterSlice = createSlice({ name: 'counter', initialState: { value: 0 }, reducers: { increment: (state) => { state.value += 1; // Direct mutation allowed due to immer.js under the hood }, decrement: (state) => { state.value -= 1; }, incrementByAmount: (state, action) => { state.value += action.payload; } } }); export const { increment, decrement, incrementByAmount } = counterSlice.actions; export default counterSlice.reducer;
createAsyncThunk は、API からデータを取得して Redux 状態に統合するなど、非同期ロジックを処理するためのツールです。非同期フローを管理するために、一連のアクション作成者 (保留中、履行済み、拒否された状態) を生成します。
import { configureStore } from '@reduxjs/toolkit'; import counterReducer from './counterSlice'; const store = configureStore({ reducer: { counter: counterReducer, }, }); export default store;
createEntityAdapter は、Redux で正規化されたデータを管理するユーティリティです。アイテムのリストなどのデータのコレクションを効率的に処理するのに役立ちます。
import { createSlice } from '@reduxjs/toolkit'; const counterSlice = createSlice({ name: 'counter', initialState: { value: 0 }, reducers: { increment: (state) => { state.value += 1; // Direct mutation allowed due to immer.js under the hood }, decrement: (state) => { state.value -= 1; }, incrementByAmount: (state, action) => { state.value += action.payload; } } }); export const { increment, decrement, incrementByAmount } = counterSlice.actions; export default counterSlice.reducer;
RTK は、Redux のセットアップに必要な定型コードの量を大幅に削減します。アクション タイプ、アクション クリエーター、リデューサーを手動で記述する代わりに、createSlice を使用してすべてを自動的に生成できるようになりました。
RTK は内部で Immer.js を使用します。これにより、リデューサー内で「変異型」コードを作成できます。ただし、Immer は、状態のコピーを自動的に作成し、それらに突然変異を適用することで、状態が不変のままであることを保証します。
redux-thunk などのミドルウェアを自動的に構成し、Redux DevTools と統合することにより、Redux Toolkit は Redux の状態のデバッグと監視を容易にします。 RTK はタイプ セーフを強力にサポートしているため、TypeScript などのツールも簡単に使用できます。
createAsyncThunk 関数は、複雑な非同期ロジックの管理に役立ち、それを Redux 状態にシームレスに統合して、非同期操作の管理の複雑さを軽減します。
RTK は、正規化されたデータを処理するための createEntityAdapter などのユーティリティを提供します。これは、Redux で大規模なデータセット (ユーザー、製品などのリストなど) を管理する場合に特に便利です。
これは、React アプリで Redux Toolkit をセットアップするための基本ガイドです。
import { createAsyncThunk, createSlice } from '@reduxjs/toolkit'; export const fetchData = createAsyncThunk( 'data/fetchData', async (url) => { const response = await fetch(url); return response.json(); } ); const dataSlice = createSlice({ name: 'data', initialState: { items: [], status: 'idle' }, reducers: {}, extraReducers: (builder) => { builder .addCase(fetchData.pending, (state) => { state.status = 'loading'; }) .addCase(fetchData.fulfilled, (state, action) => { state.status = 'succeeded'; state.items = action.payload; }) .addCase(fetchData.rejected, (state) => { state.status = 'failed'; }); } }); export default dataSlice.reducer;
createSlice を使用して Redux スライスを定義します。これには、特定の状態部分のアクションとリデューサーの両方が含まれます。
import { createEntityAdapter, createSlice } from '@reduxjs/toolkit'; const usersAdapter = createEntityAdapter(); const usersSlice = createSlice({ name: 'users', initialState: usersAdapter.getInitialState(), reducers: { addUser: usersAdapter.addOne, removeUser: usersAdapter.removeOne, } }); export const { addUser, removeUser } = usersSlice.actions; export default usersSlice.reducer;
次に、configureStore を使用して Redux ストアを設定します。
import { configureStore } from '@reduxjs/toolkit'; import counterReducer from './counterSlice'; const store = configureStore({ reducer: { counter: counterReducer, }, }); export default store;
react-redux の Provider コンポーネントでアプリをラップして、アプリケーション全体で Redux ストアを利用できるようにします。
import { createSlice } from '@reduxjs/toolkit'; const counterSlice = createSlice({ name: 'counter', initialState: { value: 0 }, reducers: { increment: (state) => { state.value += 1; // Direct mutation allowed due to immer.js under the hood }, decrement: (state) => { state.value -= 1; }, incrementByAmount: (state, action) => { state.value += action.payload; } } }); export const { increment, decrement, incrementByAmount } = counterSlice.actions; export default counterSlice.reducer;
Redux Toolkit は、ボイラープレート コードを削除し、createSlice、createAsyncThunk、configureStore などのユーティリティ関数を提供することで、Redux を使用するプロセスを簡素化します。 RTK を使用することで、開発者は Redux 構成の複雑さを気にすることなく、アプリケーションのコア ロジックに集中できます。
RTK を使用すると、同期状態と非同期状態の両方をより効率的かつ保守しやすい方法で管理できるため、大規模な React アプリケーションに最適です。
以上がRedux ツールキットのマスタリング: React アプリの状態管理を簡素化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。