効率的な Redux 開発のための実績のあるツールセットである Redux Toolkit について学びましょう。この記事では、Redux Toolkit が React コミュニティからさらに注目されるに値する理由を説明します。 React と Redux は、大規模な React アプリケーションで状態を管理するための最適な組み合わせと考えられています。しかし、時間の経過とともに、Redux の人気は次の理由で低下しました。
これらの疑問に対して、Redux の作成者である Dan Abramov 氏は、「Redux は必要ないかもしれない」というタイトルの記事を公開し、必要な場合にのみ Redux を使用し、それほど複雑でないアプリケーションを開発する場合は他の方法に従うことを提案しました。 Redux Toolkitが解決する問題Redux Toolkit (旧称 Redux Starter Kit) は、グローバル ストアを構成し、Redux API を可能な限り抽象化することでアクションとリデューサーの作成をより効率的にするためのオプションを提供します。 何が含まれていますか?Redux Toolkit には、Immer、Redux-Thunk、Reselect などの便利なパッケージが付属しています。これにより、React 開発者の作業が大幅に楽になり、状態を直接変更したり (不変性を処理せずに)、Thunk などのミドルウェアを適用したり (非同期操作を処理) できるようになります。また、リデューサー機能を簡素化するために、Redux 用のシンプルな「セレクター」ライブラリである Reselect も使用します。 Redux Toolkit API の主な機能は何ですか?以下は、既存の Redux API 関数を抽象化した Redux Took Kit で使用される API 関数です。これらの関数は Redux フローを変更するものではなく、より読みやすく管理しやすいように簡素化するだけです。
上記の API を使用すると、特に createAction メソッドと createReducer メソッドを使用して、Redux の定型コードを簡素化できます。ただし、アクション クリエーターとリデューサー関数を自動的に生成する createSlice を使用すると、これをさらに簡略化できます。 createSlice の特別な点は何ですか?メモリスライスを生成するヘルパー関数です。スライスの名前、初期状態、およびリデューサー関数を受け入れて、リデューサー、アクション タイプ、およびアクション クリエーターを返します。 まず、従来の React-Redux アプリケーションでリデューサーとアクションがどのように見えるかを見てみましょう。 アクション 「../constant/constants」から {GET_USERS、CREATE_USER、DELETE_USER} をインポートします。 エクスポート const GetUsers = (データ) => (ディスパッチ) => { 急送({ タイプ: GET_USERS、 ペイロード: データ、 }); }; エクスポート const CreateUser = (データ) => (ディスパッチ) => { 急送({ タイプ: CREATE_USER、 ペイロード: データ、 }); }; エクスポート const DeleteUser = (データ) => (ディスパッチ) => { 急送({ タイプ: DELETE_USER、 ペイロード: データ、 }); }; 減速機 「../constant/constants」から {GET_USERS、CREATE_USER、DELETE_USER} をインポートします。 定数初期状態 = { エラーメッセージ: "", 読み込み中: false、 ユーザー:[] }; const UserReducer = (state = initialState, { ペイロード }) => { スイッチ(タイプ){ GET_USERSの場合: return { ...state、users: payload、loading: false }; CREATE_USERの場合: 戻り値 { ...状態、ユーザー: [ペイロード、...状態.ユーザー]、 読み込み中: false }; DELETE_USERの場合: 戻り値 { ...状態、 ユーザー: state.users.filter((user) => user.id !== payload.id), 、読み込み中: false }; デフォルト: 状態を返します。 } }; デフォルトの UserReducer をエクスポートします。 ここで、createSlice を使用して同じ機能を簡素化して実現する方法を見てみましょう。 '@reduxjs/toolkit' から createSlice をインポートします。 エクスポートconst初期状態= { ユーザー: [], 読み込み中: false、 エラー: 偽、 }; 定数userSlice = createSlice({ 名前: 'ユーザー', 初期状態、 リデューサー: { getUser: (状態、アクション) => { アクションのペイロードをstate.usersに設定します。 状態.loading = true; 状態.エラー = false; }, createUser: (状態、アクション) => { state.users.unshift(アクション.payload); 状態.loading = false; }, deleteUser: (状態、アクション) => { state.users.filter((user) => user.id !== action.payload.id); 状態.loading = false; }, }, }); エクスポート const { createUser、deleteUser、getUser } = userSlice.actions; デフォルトの userSlice.reducer をエクスポートします。 ご覧のとおり、すべてのアクションとリデューサーが 1 つのシンプルな場所にまとめられています。従来の Redux アプリケーションでは、各アクションとそれに対応するリデューサーのアクションを管理する必要がありましたが、createSlice を使用する場合は、アクションを識別するために switch を使用する必要がありません。 一般的な Redux フローでは、状態の変更時にエラーが発生するため、これを克服するには、スプレッド演算子やオブジェクトの割り当てなどの特別な JavaScript 戦略が必要になります。 Redux Toolkit は Immer を使用するため、状態の変化について心配する必要はありません。スライスはアクションとリデューサーを作成するため、以下に示すように、アクションとリデューサー用に個別のファイルとディレクトリを作成しなくても、それらをエクスポートしてコンポーネントとストアで使用し、Redux を構成できます。 "@reduxjs/toolkit" から configureStore をインポートします。 「./features/user/userSlice」からuserSliceをインポートします。 エクスポートデフォルトconfigureStore({ リデューサー: { ユーザー: userSlice、 }, }); このストアは、useSelector と useDispatch を使用して、redux API 経由でコンポーネントから直接使用できます。操作を識別するために定数を使用したり、型を使用したりする必要はありません。 非同期Reduxフローの処理非同期アクションを処理するために、Redux Toolkit は、文字列識別子とペイロード作成者コールバックを受け入れ、実際の非同期ロジックを実行し、返された Promise とリデューサーで処理できるアクション タイプに基づいて、関連付けられたアクションのディスパッチを処理する Promise を返す、createAsyncThunk と呼ばれる特別な API メソッドを提供します。 「axios」からaxiosをインポートします。 "@reduxjs/toolkit" から createAsyncThunk をインポートします。 エクスポートconst GetPosts = createAsyncThunk( "post/getPosts"、async() => axios.get(`${BASE_URL}/posts`) を待機します ); エクスポートconst CreatePost = createAsyncThunk( "post/createPost"、async (post) => axios.post(`${BASE_URL}/post`、post) を待機します。 ); 従来のデータ フローとは異なり、createAsyncThunk によって処理されるアクションは、シャード内の extraReducers セクションによって処理されます。 "@reduxjs/toolkit" から createSlice をインポートします。 「../../services」から { GetPosts、CreatePost } をインポートします。 エクスポートconst初期状態= { 投稿: [], 読み込み中: false、 エラー: null、 }; エクスポートconst postSlice = createSlice({ 名前: "投稿", 初期状態: 初期状態、 追加リデューサー: { [GetPosts.fulfilled]: (状態、アクション) => { アクションのペイロードデータを取得します。 }, [GetPosts.rejected]: (状態、アクション) => { 状態.posts = []; }, [CreatePost.fulfilled]: (状態、アクション) => { state.posts.unshift(アクション.ペイロード.データ); }, }, }); デフォルトの postSlice.reducer をエクスポートします。 extraReducers 内では、満たされた状態と拒否された状態の両方を処理できることに注意してください。 これらのコード スニペットを使用すると、このツールキットが Redux のコードをいかに簡素化できるかがわかります。参考までに、Redux Toolkit を利用した REST の例を作成しました。 最後に私の経験では、Redux を使い始める場合、Redux Toolkit は最適な選択肢です。コードを簡素化し、定型コードを削減することで Redux の状態を管理するのに役立ちます。 最後に、Redux と同様に、Redux Toolkit は React 専用に構築されているわけではありません。 Angular のような他のフレームワークでも使用できます。 詳細については、Redux Toolkit のドキュメントを参照してください。 読んでいただきありがとうございます! 上記は、Redux Toolkit を使用して Redux を簡素化する方法の詳細です。Redux Toolkit を使用して Redux を簡素化する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: MYSQLは時間(年、月、日)フィールドを変更されていない時間、分、秒に置き換えます。分析例
アプリケーションや Web サイトのパフォーマンスが成功の重要な要素であることは誰もが知っています。...
(1)各HTMLタグには属性スタイルがあり、CSSとHTMLを組み合わせている。 <div s...
目次序文1. 新しいパーティションを準備する2. ブートパーティションをコピーする3. fstabフ...
背景: MySQL では、レベルに制限がある場合、たとえば、ツリーの最大深度を事前に決定できる場合、...
この記事では、ショッピングカートの完全な機能を実現するためのjQueryの具体的なコードを参考までに...
mysqlはブール型を返します最初のケースでは、直接戻ります select id='22a...
目次テクノロジースタックバックエンドビルドAPIフロントエンドウェブ構築ゲートウェイ建設ゲートウェイ...
導入MySQL InnoDB エンジンがレコードをクエリし、インデックス カバレッジを使用できない場...
この記事では、主にnginxのフロントエンドとバックエンドに同じドメイン名を設定する方法を紹介し、皆...
スペースを購入してウェブサイトを構築したことがある友人なら、ウェブサイトは正式に開設する前に登録する...
1. 同時実行性同時実行性は OLTP データベースの最も重要な機能ですが、同時実行性にはリソース...
カーソル選択クエリによって返される行のセットは、結果セットと呼ばれます。結果セット内の行は、入力した...
序文3 列レイアウトは、その名前が示すように、両側が固定され、中央が適応します。実際の開発では、3 ...
成果を達成するまずHTMLを使って基本的なフレームワークを構築します <本文> <...
MySQL データベースでは、null は一般的な状況です。MySQL での null に関する注意...