2016-08-23 2 views
2

Я создал базовый поток авторизации с использованием сокращений, редукс-саги и неизменяемых js.Redux saga and immutablejs

Форма Редукса (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 является непреложной картой из редукционной формы. Однако всякий раз, когда я устанавливаю log data в свои саги, он только когда-либо возвращает 0.

ответ

1

Видимо, я не обрабатывал пропусканием непреложный Map к действию правильно - правильный код:

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('/'); 
    } 
    } 
} 
Смежные вопросы