2016-08-23 83 views
2

我已經創建了一個基本的授權流程,使用了redux,redux-saga和不可變的js。redux傳奇和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形式不可變的映射。然而,無論何時我在我的傳奇中登錄日誌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('/'); 
    } 
    } 
}