2016-08-23 16 views
2

私はredux、redux-saga、およびimmutable jsを使用して基本認証フローを作成しました。Redux sagaとimmutablejs

Reduxフォーム(v6.0.0-rc.4)を使用すると、フォームで不変のマップを作成できます。これらの値をredux-sagaに渡しています。ここで、これらの値をログイン関数に渡そうとしています。

質問1:概念的には、values.get('username')を使用して不変のマップ内のデータにアクセスする適切な時期はいつですか?私のサガの中で、機能の中で?値を抽出するための最後のステップまで待つべきですか?

質問2:私は右の場所で値を抽出することが可能だと仮定すると、私はこれがサガ内で処理されなければならない方法を見てわからない - これはloginFlowのための私のサガです:

export function* loginFlow(data) { 
    while (true) { 
    yield take(LOGIN_REQUEST); 

    const winner = yield race({ 
     auth: call(authorize, { data, isRegistering: false }), 
     logout: take(LOGOUT), 
    }); 

    if (winner.auth) { 
     yield put({ type: SET_AUTH, newAuthState: true }); 
     forwardTo('/account'); 
    } else if (winner.logout) { 
     yield put({ type: SET_AUTH, newAuthState: false }); 
     yield call(logout); 
     forwardTo('/'); 
    } 

    } 
} 

dataはredux-formからの不変のマップです。しかし、私がサガでログdataをコンソールに接続したときは、いつも0が返されます。

答えて

1

どうやら私が正しくアクションに不変の地図を渡して処理していなかった - 正しいコード:

export function* loginFlow() { 

    while (true) { 

    // this line ensures that the payload from the action 
    // is correctly passed through the saga 

    const { data } = yield take(LOGIN_REQUEST); 

    const winner = yield race({ 

     // this line passes the payload to the login/auth action 

     auth: call(authorize, { data, isRegistering: false }), 
     logout: take(LOGOUT), 
    }); 

    if (winner.auth) { 
     yield put({ type: SET_AUTH, newAuthState: true }); 
     forwardTo('/account'); 
    } else if (winner.logout) { 
     yield put({ type: SET_AUTH, newAuthState: false }); 
     yield call(logout); 
     forwardTo('/'); 
    } 
    } 
} 
関連する問題