2017-11-23 14 views
0

私は佐賀の構造について考えてきましたが、それは正しいかどうかわかりません。Reduxのためのよりよい構造は何ですか?

たとえば、私は複数のサガファイルを持っていますが、それぞれの典型的なサガファイルに対して、1つのウォッチャーサガは異なるアクションを同時に監視し、デフォルトでこのウォッチャーサガをエクスポートする必要があります。ここで

は私の暫定的なアプローチである:

私はわからABOTないです道のIグループウォッチャーの冒険談

/** 
* saga.js 
* 
* one watcher saga watch multiple actions concurrently 
* However, from my research, I can only see that everyone seems to create 
* multiple watcher sagas, and each watcher only watch single action which is 
* sort of verbose 
*/ 
function* watchSomething() { 
    yield all([ 
    takeLatest(GET_SOMETHING, callGetSomething), 
    takeLatest(GET_SOMETHING_2, callGetSomething_2), 
    takeLatest(GET_SOMETHING_3, callGetSomething_3), 
    ]); 
} 
export default watchSomething; 

そして

/** 
* rootSaga.js 
* 
* import different watcher sagas from different saga.js files 
*/ 
export default function* root() { 
    yield all([ 
    watchSomething(), 
    watchSomething_2(), // the others ... 
    ]); 
}; 

答えて

0

ABOTわかりませんウォッチャーのサガをグループ化する方法

通常、redux-sagaは非同期プロセスマネージャであり、サブスクライブイベントと発光イベントを異なる方法で操作することができます。
最も簡単な方法は、takeEvery/takeLatest関数を使用して構成され、sagaprocess managerは、トラップされた各アクションに対して独立したプロセス(正式にティックコールバックドメイン、ESはシングルスレッドなので)を自動的に実行します。

しかし、自分でsagaのプロセスをforkというエフェクトで簡単に生成し、カスタムの方法で操作できます。操作上の制御フローは、多くのアクションのために同じである場合は、その後の取り扱いで発電ループを実行することができます。もちろん

function * manyActionsSaga() { 
    let flowPromise = Promise.resolve(); 
    while(true) { 
     const action = yield take(['ACTION_1', 'ACTION_2', 'ACTION_3']); 
     yield call(() => flowPromise) 
     flowPromise = flowPromise.then(() => { 
      // Similar event handling 
     }) 
    } 
} 

、また、あなたはそれが目的の引数を指定して、それぞれ、すべてのアクション・グループのために一つの処理機能を持っているし、その後bindすることができます。

関連する問題