2016-04-09 11 views
3

これはかなり基本的かもしれませんが、解決策は見つかりませんでした。私はredux-sagaを使用して、私の非同期API呼び出しをreduxで処理しています。私はストアに複数のリスナーを接続する必要があります。私は例のようなforkを試して、最初のフォークは動作しますが、2番目のフォークは動作しません。複数のリスナーを接続するにはどうすればよいですか?Redux-Sagaは複数の発電機を接続して保管します

export default function* mySaga() { 
    yield [ 
    fork(yield* takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends)), // works 
    fork(yield* takeEvery("CREATE_USER_REQUESTED", createUser)), // doesn't work 
    ] 
} 

ありがとうございます!

答えて

1

は同じ問題を抱えて、私は別の方法を見つけた

export default function* root(){ 
    yield [ 
     takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends), 
     takeEvery("CREATE_USER_REQUESTED", createUser) 
    ]; 
} 
+0

ありがとう、私に50行の定型文を保存しました! – Cole

4

forkがここにドキュメントごとに約束またはジェネレータ関数を返す機能とるためです:ちょうどでyield*を入れて、あなたの状況を動作させるために

http://yelouafi.github.io/redux-saga/docs/api/index.html#forkfn-args

をジェネレータ機能とそれがすべて動作する必要があります:

export default function* mySaga() { 
    yield [ 
    fork(watchFetchFriends), 
    fork(watchCreateUser) 
    ] 
} 
function watchFetchFriends() { 
    yield* takeEvery("FRIEND_FETCH_REQUESTED", fetchFriends); 
} 
function watchCreateUser() { 
    yield* takeEvery("CREATE_USER_REQUESTED", createUser); 
} 

Btw、私はあなたの最初のyield*がどのように動作するかはわかりません。

+1

ジェネレータは、ジェネレータジェネレータを展開し、ジェネレータtakeEveryが戻るのを待って、最初にyield *を評価します。それで、最初のyieldが動作する理由です。 –

+0

@ YassineElouafiおそらく、 'yield *'が 'fork'に渡されたことを検出すると、例外がスローされる可能性がありますか? – ganaraj

+0

ありがとうございます@ganarajこれはこれを解決します! 'redux-saga/effects 'から' import {fork}をインクルードすると助けになります。XND – Cole

0

Reduxの佐賀はReduxの店のための1人のルートサガに複数のサガを組み合わせることが、最近のバージョン(0.15.3)にall機能を使用しています。

関連する問題