Я использую React и Redux для создания системы входа с помощью Google Firebase. Я пытаюсь понять, как использовать thunks. Я вызываю свое действие createUser
из моего компонента React, однако я не могу успешно обработать обратный вызов.Thunks in React-Redux - не разрешение?
Вот функция компонента Я зову действие от:
registerUser() {
let email = this.state.user.email;
let pw= this.state.user.password;
this.props.actions.createUser(email, pw)
.then((user) => {
debugger; // The async request is successful but execution doesn't pause here
})
.catch((error) => {
debugger; // Instead I receive an error here that says, "Uncaught (in promise) RangeError: Maximum call stack size exceeded"
});
}
Вот являются действия:
export function createUserSuccess(user) {
debugger;
return { type: types.CREATE_USER_SUCCESS, payload: { registeredUser: user, registerMsg: 'Successful Registration!' }};
}
export function createUserError(error) {
return { type: types.CREATE_USER_ERROR, payload: { registeredUser: {}, registerMsg: error.message }};
}
export function createUser(email, pw) { // async thunk
debugger;
return (dispatch) => {
debugger;
return firebase.auth().createUserWithEmailAndPassword(email, pw)
.then((user) => {dispatch(createUserSuccess(user))}) // todo: figure out why this won't resolve
.catch(error => dispatch(createUserError(error)));
}
}
И мой Разбавление:
import * as types from '../actions/actionTypes';
import initialState from './initialState';
export default function registerReducer(state = initialState.registeredUser, action) {
debugger;
switch (action.type) {
case types.CREATE_USER_SUCCESS:
return [
...state, // es6 spread operator - explodes all values in array
Object.assign({}, action.payload)
];
case types.CREATE_USER_ERROR:
return [
...state,
Object.assign({}, action.payload)
];
default:
return state;
}
}
Я знаю запрос на firebase Google в порядке, потому что создатель действия createUserSuccess
уволен. Почему прекращение выполнения в соответствующем месте в моем компоненте React?
Вы можете обновить свой контейнер здесь? –
Если в обратном вызове catch обнаружена ошибка, после вызова 'createUserSuccess (user)' может быть что-то в этой функции или ваш редуктор, который генерирует исключение. Не могли бы вы поделиться своим кодом редуктора? –
@NikolajDamLarsen Я тоже так думал, но я не мог найти ничего плохого в моем коде редуктора. Я добавил его выше. – mbrashid62