行动布线中的数据丢失了

时间:2018-01-14 04:21:20

标签: reactjs firebase redux firebase-authentication redux-async-actions

我有一个简单的注册表单,其中包含电子邮件,密码和管理代码字段。我将这些数据传递给我的动作创建者,并在完成注册之前通过了三个操作。在那里的某个地方,它正在停止。它不返回任何错误。这是我的代码。

export const checkAdminCode = ({ email, password, adminCode }, history) => {
  return (dispatch) => {
    dispatch({ type: CHECK_ADMIN_CODE });

    firebase.database().ref('/env/adminCode').once('value', (snapshot) => {
      if (snapshot.val() === adminCode) {
        return registerUser(email, password, history, dispatch);
      }

      return loginUserFail(dispatch);
    });
  };
};

const registerUser = (email, password, history, dispatch) => {
  return (dispatch) => {
    dispatch({ type: REGISTER_USER });

    firebase.auth().createUserWithEmailAndPassword(email, password)
      .then((user) => loginUserSuccess(dispatch, history, user))
      .catch((err) => loginUserFail(dispatch, err));      
  };
};

const loginUserSuccess = (dispatch, history, user) => {
  history.push('/admin/dashboard');
  dispatch({
    type: LOGIN_USER_SUCCESS,
    paylaod: user
  });
};

有几点需要注意:

  • if (snapshot.val() === adminCode) {确实有用。
  • 在我添加管理代码之前,我已将表单提交直接发送到registerUser并且它有效。
  • 我放置了几个console.logs,试图找到故障发生的确切位置。在测试以下代码时:

    const registerUser = (email, password, history, dispatch) => {
      console.log('test1');
      return (dispatch) => {
        console.log('test2');
        dispatch({ type: REGISTER_USER });
    
        firebase.auth().createUserWithEmailAndPassword(email, password)
          .then((user) => loginUserSuccess(dispatch, history, user))
          .catch((err) => loginUserFail(dispatch, err));      
      };
    };
    

console.log('test1');工作,console.log('test2');无效。

再一次,它没有返回任何错误,因此我不知道如何描述正在发生的事情或搜索的内容。

请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:0)

registerUserasync redux action,您需要使用dispatch进行调用。

您不需要明确地将dispatch传递给调用函数。

它将通过redux隐含地传递。

export const checkAdminCode = ({ email, password, adminCode }, history) => {
      return (dispatch) => {
        dispatch({ type: CHECK_ADMIN_CODE });

        firebase.database().ref('/env/adminCode').once('value', (snapshot) => {
          if (snapshot.val() === adminCode) {

            dispatch (registerUser(email, password, history));
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

          }

          return loginUserFail(dispatch);
        });
      };
    };