Я слежу за этим Пройдите курс по Удеми , и я столкнулся с действительно странной ошибкой.
Я использую Firebase для аутентификации по электронной почте и паролю. Когда пользователи нажимают на кнопку «Войти», я отправляю действие LOGIN_USER, которое устанавливает состояние загрузки.
При успешном входе в систему я отправляю действие под названием LOGIN_USER_SUCCESS
, чтобы остановить состояние загрузки.
По какой-то причине LOGIN_USER_SUCCESS
не произойдет, пока я не коснусь случайного места на экране.
Если я удаляю строку dispatch({ type: LOGIN_USER });
, чтобы отключить состояние загрузки, авторизация вернется через пару секунд.
My actions
-----------
export const loginUser = ({ email, password }) => {
return (dispatch) => {
dispatch({ type: LOGIN_USER });
firebase.auth().signInWithEmailAndPassword(email, password)
.then(user => loginUserSuccess(dispatch, user))
.catch((error) => {
console.log(error);
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(user => loginUserSuccess(dispatch, user))
.catch(() => loginUserFail(dispatch));
});
};
};
const loginUserSuccess = (dispatch, user) => {
dispatch({
type: LOGIN_USER_SUCCESS,
payload: user
});
};
const INITIAL_STATE = {
email: '',
password: '',
user: null,
error: '',
loading: false
};
/// My reducer
---------------
export default (state = INITIAL_STATE, action) => {
switch (action.type) {
case EMAIL_CHANGED:
return { ...state, email: action.payload };
case PASSWORD_CHANGED:
return { ...state, password: action.payload };
case LOGIN_USER:
return { ...state, loading: true, error: '' };
case LOGIN_USER_SUCCESS:
return { ...state, ...INITIAL_STATE, user: action.payload };
case LOGIN_USER_FAIL:
return { ...state, error: 'Authentication Failed.', password: '', loading: false };
default:
return state;
}
};
Я попытался .then(user => console.log(user))
, и я не вижу журнал консоли до тех пор, пока случайно не коснусь в любом месте экрана.
Если я сделаю .then(console.log('foo')
, я сразу же увижу foo, но экран все еще зависает.
Как я уже говорил, я следую учебному пособию, а полный источник - здесь, на GitHub . Я в основном получил точно такой же код.