2017-03-20 23 views
0

私は、複数の機能がアクション内の各コールバックの応答に呼び出しを行う必要があるかどうかを、論理的な問題を持っている:Redux - アクションまたはレデューサーで一連の関数を呼び出す?

export const myAction=() => (distaptch, getState) => { 
    callFunctionA(function(e){ 
     if(e){ 
      dispatch(eventA(e)); 

      callFunctionB(function(e){ 

       dispatch(eventB(e)); 

       callFunctionC(function(e){ 

        dispatch(eventC(e)); 
       }); 
      }); 
     } 
    }); 
} 

または私はReduxの減速にこれらの呼び出しを移動すると、そこからすべての次の関数を呼び出すことができます?

const reducer = (state={}, action) => { 
    switch (action.type) { 
    case 'EVENT_A': 

     callFunctionB(action.e); 

     return state; 
    case 'EVENT_B': 

     callFunctionC(action.e); 
     return state; 
    default: 
     return state 
    } 
} 

2番目のアプローチは、スパゲッティコードにつながるアンチパターンのように見えます...多分私は間違っていますか?

+3

「第2のアプローチは、アンチパターンのように見える」最初のものはコールバック地獄のように見える –

+0

@Daniel_L、あなたはレデューサーの機能を呼び戻すことを検討するだろうか? – ArkadyB

+0

私はredux-sagaやredux-observableのような非同期アクションの変換を扱うライブラリを検討することを検討します。これは、メンテナンスが容易なコードで終わらないためです。 –

答えて

1

リデューサーのディスパッチアクションがアンチパターンであると仮定しても問題ありません。理由はかなり簡潔にin this postと言われています。 Reduxのドキュメントから

:あなたは減速機内部でやるべきではありません

もの:

は、その引数を変異させます。

APIコールやルーティング移行などの副作用を実行します。

(非純粋関数を、例えばDate.now()または Math.random()を呼び出します。

[...]今のところ、ちょうど減速が 純粋でなければならないことを覚えておいてください。考えます同じ引数、それは次の状態を計算しないと それを返す必要があります。何の驚きを。副作用なしAPIコールなし変異。 だけで計算。

あなたは避けるように非同期フローを処理するためにRedux-Sagaに見ることができます最初のexaに表示されるアクションのコールバック地獄mple。

+0

サンクのawait/asyncと同じですか? – ArkadyB

+0

async/awaitとredux-thunkとredux-sagaの相違点/類似点を詳しく説明した記事です。 http://stackoverflow.com/questions/34930735/pros-cons-of-using-redux-saga-with-es6-generators-vs-redux-thunk-with-es7-async/34933395 –

関連する問題