В моем файле EmailCollection/index.js
, в функции updateUsersEmail
, у меня есть следующий код:
this.props.checkEmail(email)
.then(() => {
this.props.redirect();
})
.catch((error) => {
});
checkEmail
и updateUserEmail
являются действиями , определенными как
export const updateUserEmail = (userEmail) => {
return createGraphqlAction(
{
query: `
mutation setLoginEmail($userEmail: String!) {
setLoginEmail(email: $userEmail) {
login {
email
}
state
name
id
}
}
`,
variables: {
userEmail,
},
},
UPDATE_USER_EMAIL,
);
};
export const checkEmail = (userEmail) => {
return createGraphqlAction(
{
query: `
query checkEmail($userEmail: String!) {
checkEmail(email: $userEmail) {
isEmailTaken
}
}
`,
variables: {
userEmail,
},
},
CHECK_IF_EMAIL_IS_TAKEN, <- this is a constant for a string of the same format to prevent any spelling issues
);
};
Наконец, в моем checkEmail.js
у меня есть:
import { takeEvery, put } from 'redux-saga/effects';
import { updateUserEmail, CHECK_IF_EMAIL_IS_TAKEN } from './../actions';
export default function* confirmEmailSaga() {
yield takeEvery(CHECK_IF_EMAIL_IS_TAKEN.SUCCESS, function* (result) {
const { isEmailTaken } = result.data.checkEmail;
const { email } = result.variables.userEmail;
if (isEmailTaken) {
// TODO: return some error that EmailCollection.js can consume
} else {
yield put(updateUserEmail(email)); // this isn't updating, why?
}
});
В идеале в приведенной выше логике isEmailTaken
я бы хотел вернуть что-то, что может компонентПотребление, которое дает информацию о природе ошибки, чтобы я мог соответствующим образом настроить интерфейс.
Я также хотел бы понять, почему yield put(updateUserEmail(email))
не вызывает обновление статуса пользователя в базе данных.
Спасибо!