2016-04-22 12 views
6

多対多の関係を持っているため、アクションとレデューサーの分離に関する議論を見ました。Reduxでは、アクションとレデューサーを分離するのはなぜですか?

Reduxでも実際には当てはまりません。 1つのデータストアしかないので、減量措置へのアクションは1対多でなければなりません。

通常、レデューサーは特定のデータストアの特定の変更に適用されます。

MY_ACTION = "MY_ACTION" 
function reducer(state, action) { 
    switch(action.type) { 
     case MY_ACTION: // stuff with my action to create new state 
     default: return state 
    } 
} 

アクション自体にアクションのハンドラを定義していない、なぜ我々はそうcombineReducersで複数の減速を組み合わせることができます。 「アヒル」のパターンで

例えば

class Action { 
    constructor(type) { 
     this.type = type 
     this.handlers = [] 
    } 
    add_handler(handler) { 
     this.handlers += handler 
    } 
    get_reducer() { 
     reducer = combineReducers(this.handlers) 
     return (state, action) => { 
      if(action.type == this.type) { 
       return reducer(state, action) 
      } 
      return state 
     } 
    } 
} 

、我々は行動宣言と同じモジュールにメインレデューサーを入れてしまいます。

レデューサーとレビュックスとを別々にする理由はありますか?

+0

あなたが尋ねているか説明しているかはわかりません。 – JMM

答えて

3

アクション作成者をレデューサー機能から分離する主な理由は、レデューサー機能が純粋な機能でなければならないということです。たとえば、非同期API呼び出しのようなアクション作成者で何かをしたいのであれば、これをレデューサーに入れることはできません。このhereについての大きな説明があります。

+0

私は、あなたのレデューサーがajax呼び出し、副作用のあるサービス/機能にアクセスするのを望まないと言っています。 アクションクリエイターは、サービスにアクセスして、必要な副作用を作成できます。アクションクリエイターとレデューサーを同じ場所に配置すると、アプリケーション構造によってスパゲティのようになります。 具体的には、私のAngular2アプリケーションはモジュールで構成されており、私の店舗モジュールがどんなサービスにもアクセスできるようにしたくありません。 一方、アクションクリエイターはあらゆる種類のサービスにアクセスする必要があります彼らはもっとアクセスする必要があります... – Spock

関連する問題