Redux saga和immutablejs

时间:2016-08-23 15:10:26

标签: redux immutable.js redux-saga

我使用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

1 个答案:

答案 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('/');
    }
  }
}