React Native Router Flux(react-native-router-flux) - 在reducer中调用action

时间:2016-09-27 07:18:31

标签: reactjs react-native redux react-redux react-native-router-flux

我有一个关于从减速器调用动作或仅重定向到另一个场景的问题。用户成功登录后,我想重定向到一个场景。我有我的action.js,它使用' redux-api-middleware'模块:

action.js

export const LOGIN_REQUEST = 'LOGIN_REQUEST';
export const LOGIN_SUCCESSFUL = 'LOGIN_SUCCESSFUL';
export const LOGIN_FAILED = 'LOGIN_FAILED';

export function login(data) {
  return {
    [CALL_API]: {
      endpoint: API_ROOT + 'login',
      method: 'POST',
      types: [LOGIN_REQUEST, LOGIN_SUCCESSFUL, LOGIN_FAILED],
      body: JSON.stringify(data)
    }
  }
}

reducer.js

function login(state = initalstate, action){

  switch (action.type) {

    case LOGIN_REQUEST:

        return {
            ...state,
          isFetching: true
        };

    case LOGIN_FAILED:

        return {
            ...state,
          error: action.error,
          isFetching: false
        };

    case LOGIN_SUCCESSFUL:

        return {
            ...state,
          error: null,
          isFetching: false
        };  

      break;

    default:
      return state;

  }

}

现在,如果我得到LOGIN_SUCCESSFUL,我想调用ActionsMY_SCENE_KEY之类的操作来重定向到下一个屏幕。当我在reducer中调用Actions时出现一些错误,这可能是错误的方法。

1 个答案:

答案 0 :(得分:0)

您不应该使用减速器触发操作。 你有两个otpions:

1)当您的用户成功登录时,您可以在您的州内反映出来:

case LOGIN_SUCCESSFUL:

    return {
        ...state,
      error: null,
      isFetching: false,
      loggedIn: true,
    }; 

在连接到州的容器中,您可以检查此state.loggedIn值并通过调度转换操作来相应地触发转换。

2)当您处理登录API响应时,如果成功回复,您只需调度转换场景动作即可重定向到下一个屏幕(您可以将其与成功的登录操作调度结合使用)。