Как мне использовать redux для выполнения нескольких действий в саге и отслеживания общего успеха / неудачи в компоненте? - PullRequest
2 голосов
/ 21 марта 2019

В моем файле 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)) не вызывает обновление статуса пользователя в базе данных.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...