我使用redux,redux-saga和immutable js创建了一个基本的授权流程。
Redux表单(v6.0.0-rc.4)允许表单创建不可变映射。我将这些值传递给redux-saga,我试图将这些值传递给我的登录函数。
问题1 :从概念上讲,何时是使用values.get('username')
访问不可变地图内的数据的适当时机?在我的传奇中,在功能中?我是否应该等到最后一步可以提取值?
问题2 :假设我能够在正确的位置提取值,我不确定我是否会在传奇中看到这应该如何处理 - 这是我对loginFlow的传奇:< / p>
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
。
答案 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('/');
}
}
}