2016-11-22 7 views
1

私はシンプルな(またはより高度な)レデューサーを提供するいくつかのファクトリー関数を作成しました。私はカジュアルなアクションのほとんどを処理し、完全に機能する減速機にそれらを構成することができ、これらのファクトリ関数とreduxからcombineReducersを使用してReduxの上位レデューサーの作成

export const reduceRequestState = (requestTypes: RequestActionTypes) => 
    (state: RequestState = RequestState.None, action: Action): RequestState => { 
     switch (action.type) { 
      case requestTypes.start: 
       return RequestState.Waiting; 
      case requestTypes.success: 
       return RequestState.Success; 
      case requestTypes.error: 
       return RequestState.Error; 
      case requestTypes.reset: 
       return RequestState.None; 
      default: 
       return state; 
     } 
    }; 

: - たとえば(単純なアクションタイプのベースは、値としてRequestState定数を設定します)。それは私に読めるコードを与え、私がばかげた間違いをするのを防ぎます。

ファクトリは一般的なアクションには適していますが、ストアの一部を変更するカスタム動作(アクションタイプ用)を追加する必要があるときは、そのアクションを処理するリデューサのカスタム部分を書きたいと思います私。 考え方は、反復子を反復的に構成することです。したがって、配列の場合はcombineReducersです。このようにして、私の工場で減速機を作ってから、それを私のカスタム減速機と組み合わせて、いくつかの特定の動作を処理することができます。配列のcombineReducersは、最初の配列を呼び出し、何も変更されていないことを認識し、2番目の(カスタム)配列を呼び出してアクションを処理します。

私はいくつかの解決策を探していて、redux-actionsを見つけましたが、セマンティクスを私が慣れ親しんだものと少し違うようにアクションとレデューサーをリンクする方法はあまり好きではありません。たぶん私はそれを得ることはできませんが、最終的に私のレデューサーは純粋な機能として書かれているのが好きです。

私は方法を示すいくつかのヒントを探しています。 任意の種類の高次減速機を使用し、何らかの方法でそれらを組み合わせたライブラリまたはプロジェクトはありますか? 上記のようなレデューサーの作成に関する欠点はありますか?

答えて

2

うんレデューサーはだけ機能なので、あなたがロジックを整理することができます無限の方法があります、と一緒に複数の機能を構成することは非常にを奨励しています。

あなたが探している "アレイ内のレデューサー"のアイデアはhttps://github.com/acdlite/reduce-reducersです。私は頻繁にそのような振る舞いのために私自身のアプリケーションでそれを頻繁に使用します - combineReducers-生成されたレデューサーを実行してから、より具体的な動作のためにレデューサーを順番に実行します。

私はReduceドキュメントのセクションを書いています。Structuring Reducersと呼ばれ、レデューサーロジックに関する多くのトピックが含まれています。これには、通常のcombineReducersアプローチを超えた有用なパターンが含まれます。

Redux addons catalogの一部としてmany other reducer-related utilitiesのリストもあります。

関連する問題