Данные теряются где-то в проводке действий
У меня есть простая форма регистрации с полями для электронной почты, пароля и кода администратора. Я передаю эти данные своему создателю действий, и они проходят через три действия перед завершением регистрации. Где-то там, это просто останавливается. Не возвращает ошибок. Вот мой код
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 ответ
registerUser
является async redux action
нужно позвонить с dispatch
,
Вам не нужно проходить dispatch
Explicitaly для вызова функции.
Это будет пропущено косвенно по редуксу.
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);
});
};
};