Redux-reducers
Redux-レデューサー
レデューサーはReduxの純粋な機能です。 純粋な機能は予測可能です。 レデューサーは、Reduxで状態を変更する唯一の方法です。 ロジックと計算を記述できる唯一の場所です。 Reducer関数は、アプリの以前の状態とディスパッチされるアクションを受け入れ、次の状態を計算して新しいオブジェクトを返します。
次のいくつかのことは、レデューサー内で実行しないでください-
- 関数の引数の突然変異
- API呼び出しとルーティングロジック
- 非純粋関数の呼び出し Math.random()
以下は、レデューサーの構文です-
アクションクリエーターモジュールで説明したWebページに製品アイテムのリストを表示する例を続けましょう。 その減速機を書く方法を以下に見てみましょう。
まず、状態を「initialState」に設定しない場合、Reduxは未定義の状態でreducerを呼び出します。 このコード例では、JavaScriptのconcat()関数が「ITEMS_REQUEST_SUCCESS」で使用されていますが、既存の配列は変更されません。代わりに、新しい配列を返します。
この方法で、状態の突然変異を回避できます。 州に直接書かないでください。 「ITEMS_REQUEST」では、受信したアクションから状態値を設定する必要があります。
レデューサーでロジックを記述し、論理データに基づいて分割できることは既に説明しました。 大規模なアプリケーションを扱う場合、レデューサーを分割してルートレジューサーとして組み合わせる方法を見てみましょう。
ユーザーが製品の注文ステータスにアクセスしてウィッシュリスト情報を表示できるWebページを設計するとします。 異なるレデューサーファイルでロジックを分離し、それらを独立して動作させることができます。 GET_ORDER_STATUSアクションがディスパッチされ、ある注文IDとユーザーIDに対応する注文のステータスを取得すると仮定しましょう。
同様に、GET_WISHLIST_ITEMSアクションがディスパッチされ、ユーザーのウィッシュリスト情報を取得すると仮定します。
ReduxのcombinedReducersユーティリティを使用して、両方のレデューサーを結合できるようになりました。 composeReducersは値が異なるリデューサー関数であるオブジェクトを返す関数を生成します。 インデックスリデューサーファイルにすべてのリデューサーをインポートし、それらをそれぞれの名前を持つオブジェクトとして結合できます。
さて、次のようにこのrootReducerをcreateStoreメソッドに渡すことができます-