Отсутствует выбор для объекта GraphQL + ошибка Аполлона - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть набор мутаций, которые запускают локальное состояние некоторых типов всплывающих окон. Они обычно настроены так:

  openDialog: (_, variables, { cache }) => {
    const data = {
      popups: {
        ...popups,
        dialog: {
          id: 'dialog',
          __typename: 'Dialog',
          type: variables.type
        }
      }
    };

    cache.writeData({
      data: data
    });
    return null;
  }

И значения по умолчанию, которые я передаю, выглядят так:

const defaults = {
  popups: {
    __typename: TYPENAMES.POPUPS,
    id,
    message: null,
    modal: null,
    menu: null,
    dialog: null
  }
};

То, как они используются в моем коде React, с помощью компонента-оболочки Mutation, например:

const OPEN_ALERT_FORM = gql`
  mutation AlertOpenDialog($type: String!) {
    openDialog(type: $type) @client
  }
`;

class Alert extends Component {
  render() {
    return (
      <Mutation mutation={OPEN_ALERT_FORM} variables={{ type: ALERT_FORM }}>
        {openDialog => {
          return (
            <Button
              classes="alert-button"
              onClick={openDialog}
              label="Trigger Alert"
            />
          );
        }}
      </Mutation>
    );
  }
}

Для моих различных всплывающих окон (у меня есть 3 или 4 разных, таких как menu и modal), мутации для их открытия и закрытия выглядят одинаково, только разные имена и содержание и т. Д. Но для диалогов, Я получаю эту ошибку, когда нажимаю на них:

Ошибка сети: отсутствует набор выбора для объекта типа Dialog, возвращаемый для диалогового окна поля запроса

... и затем запускающий компонент исчезает со страницы. Кроме того, как только это происходит, все другие типы всплывающих окон исчезают, когда вы пытаетесь щелкнуть по ним, и либо повторно выдает эту ошибку, либо говорите:

Uncaught Error: возникла перекрестная ошибка. У React нет доступа к фактическому объекту ошибки в разработке.

Я пытался переписать диалоги, чтобы соответствовать другим всплывающим типам, а также переписывал компоненты, но я все еще получаю эту ошибку. Похоже, это диалог + Аполлон. Что может быть корнем этой проблемы? Это не может быть бэкэндом, потому что это касается только местного Аполлона. Я не видел эту ошибку раньше, и я не уверен, куда идти дальше.

Ответы [ 3 ]

0 голосов
/ 19 января 2019

Было то же сообщение об ошибке проблемы. Похоже, что пока это единственный вопрос в stackoverflow с таким же сообщением об ошибке в вопросе.

Я просто запишу свою сторону вещей

В моем случае у меня есть запрос, который не запрашивает поля объекта. Anagolous для этого случая, запрос, который я имею, выглядит так

{
  popups @client {
    id
    dialog
  }
}

должно быть

{
  popups @client {
    id
    dialog {
      id
    }
  }
}
0 голосов
/ 08 марта 2019

Ответ на актуальную проблему, похоже, лежит в запросе. Изначально клиент Apollo не проверял типы для @client запросов / мутаций, поэтому ваша мутация может выглядеть так, как вы написали в вопросе:

mutation AlertOpenDialog($type: String!) {
  openDialog(type: $type) @client
}

правильный способ написания выше - указать (выбрать) все поля простого типа (скалярные), которые вы хотите получить в ответе. Поэтому в отношении ответа @Vic мутация должна выглядеть примерно так:

mutation AlertOpenDialog($type: String!) {
  openDialog(type: $type) @client {
    dialog {
      id
    }
  }
}
0 голосов
/ 22 ноября 2018

Исправление для этого оказалось работающим, обрабатывая поле dialog как строку вместо объекта. Изменение функции на это сделало хитрость и заставило ошибки исчезнуть:

  openDialog: (_, variables, { cache }) => {
    const data = {
      popups: {
        ...popups,
        dialog: variables.type
      }
    };

    cache.writeData({
      data: data
    });
    return null;
  }
...