2016-11-08 7 views
0

私のシナリオでは、ユーザーはバウチャーを利用することができます。彼女はログインしていないが、引き続きどのように機能しているかを理解するために償還機能をテストすることができる。2つのredux-sagaフローの切り替え

彼女がログインしていないケースでloggedInRedeemFlowは彼女がログインしているとき、私は2が流れ、ケースのためnotLoggedInRedeemFlowを持っている。

私はルート佐賀に持って、それは一つのフローを開始し、に基づいて、他を停止する必要がありますユーザーのログイン状態。

このフローでは、1つのフローとcancellationアクションの間でレースを使用することができました。ユーザがログアウトするまで、アプリnotLoggedInRedeemFlowを起動時に

はアクティブであり、ときにユーザーがログインし、それが終了する必要があります。その後

loggedInRedeemFlow開始され、実行されます。

function* redeemFlows() { 
    while (true) { 
    const result = yield race({ 
     fake: call(notLoggedInRedeemFlow), 
     gotAccessToken: take([accountActions.LOGIN_SUCCESS, accountActions.START_SIGNUP_SUCCESS]), 
    }) 
    yield race({ 
     run: call(loggedInRedeemFlow, result.gotAccessToken.payload.access_token), 
     logout: take(accountActions.LOGOUT_SUCCESS), 
    }) 
    } 
} 

私の質問は、それがredux-sagasでこのようなシナリオを処理する最善の方法であるかどうかです。

答えて

0

あなたのユースケースを正しく理解している場合、UIから起動されたREDEEMアクションと、ログインしているかどうかを解釈するサガが必要です。ログインしている場合は、REDEEM_LOGGED_INアクションを実行します。そうでない場合は、REDEEM_NOT_LOGGED_INアクションを実行します。そして、それらのREDEEM_LOGGED_INとREDEEM_NOT_LOGGED_INアクションをそれぞれ処理するサブサギが存在します。

import {takeLatest} from 'redux-saga'; 

export default function* rootSaga() { 
    yield takeLatest('REDEEM', handleGenericRedeem); 
    yield takeLatest('REDEEM_NOT_LOGGED_IN', handleRedeemNotLoggedIn); 
    yield takeLatest('REDEEM_LOGGED_IN', handleRedeemLoggedIn); 
} 

正確なアクション名と、takeLatestを使用するかどうかは、あなたとあなたの特定のユースケースによって異なります。 takeLatestは必要ないかもしれませんが、コードスニペットはどのようにして問題を解決できるのかを理解する必要があります。

関連する問題