响应逻辑应该发生在传奇或化简版中?

Tru*_*ufa 5 javascript reactjs redux redux-saga

假设我有一个看起来像这样的传奇:

export function* incrementAsync(action) {
  try {
    const res = yield call(Api.signin.create, action.payload);
    yield put({ 
      type: USER_SIGN_IN_FETCH_SUCCESS,
      payload: res.data.auth
    };
  } catch (e) {
    yield put({ type: USER_SIGN_IN_FETCH_ERROR_NETWORK });
  }
}
Run Code Online (Sandbox Code Playgroud)

这次尝试取得了成功,但这并不意味着用户实际上已经登录:

res.data.auth.error 可能是真的

我的问题是我是否应该做以下事情:

if (//user was succesfully logged in)
    yield put(//user was successfully logged in)
else if //wrong username
    yield put(//wrong username)
else if //wrong password
    yield put(//wrong password)
Run Code Online (Sandbox Code Playgroud)

还是我应该只有一个代表成功,一个代表错误,并在化简器中分析逻辑并相对于响应数据建立存储?

Mar*_*kus -1

我总是将尽可能多的逻辑移至减速器。逻辑在开发工具中更明显,如果你在传奇中做到这一点可能会更困难。它也更容易测试,因为它是一个同步的纯函数。另外,USER_SIGN_IN_FETCH_SUCCESS对于从 saga 发送到减速器的操作对我来说似乎完全有意义(从组件到减速器的操作应该技术性较低)。