効率的な 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は時間(年、月、日)フィールドを変更されていない時間、分、秒に置き換えます。分析例
Iframe Web ページのナビゲーション ウィンドウに関する簡単な説明 Iframe ウェブペー...
目次序文: 1. データ移行について2. 移行計画と留意点要約:序文:日常業務では、テーブル、データ...
元のコードは次のとおりです。 <div class='コントロールグループ'&...
MySQL が数千万のデータをクエリする場合、ほとんどのクエリ最適化の問題はインデックスを通じて解決...
1. テストテーブルを作成する テーブル `mysql_genarate` を作成します ( `id...
目次ブラウザ同一生成元ポリシー1. VUEフロントエンド構成プロキシはクロスドメインの問題を解決しま...
この記事では、例を使用して MySQL ユーザーと権限の管理について説明します。ご参考までに、詳細は...
Web デザインでは、Web サイトに表示されるデータの構造とコンテンツをユーザーが明確に理解できる...
上記の Web ページをデザインします。 <!DOCTYPE html> <htm...
Ubuntu にインストールされているバージョンをアンインストールします。 sudo apt-get...
この関数の効果はvue的provide/injectに似ています。 contextを通じて反応できる...
目次質問背景アイデアと実装質問次のように、同時実行 Promise の数を制御するメソッドを記述する...
聞く: CSS を使用してハイパーリンクのスタイルを設定しましたが、ホバーしても機能しません。なぜこ...
序文Web アプリケーションでは、トラフィックを節約し、転送データのサイズを縮小し、転送効率を向上さ...
目次一般的な圧縮形式: gz .bz2 .xz .zip一般的に使用されるアーカイブは圧縮を必要とす...