Как определить схему на стороне клиента в приложении «Reaction-Apollo»? - PullRequest
0 голосов
/ 24 июня 2019

Я использую react-apollo в своем кандидате на реагирование и не могу понять, как реализовать схему на стороне клиента.

У меня есть ниже определение типа:

export const alertTypeDefs = gql`
  type Query {
    alert: Alert
  }
  type Alert {
    message: String!
    type: String!
    duration: Int!
  }
`;

Он определяет Query, который возвращает alert объект.

Ниже приведен код, который я хочу использовать для этого запроса.

const cache = new InMemoryCache();

export const createClient = () => {
  return new ApolloClient({
    cache,
    typeDefs: [alertTypeDefs]
  });
};

Сначала я инициализировал экземпляр ApolloClient с кэш-памятью и определенным выше alertTypeDefs. Ниже приведен код для выполнения запроса:

const client = createClient();

const data = client.readQuery({query: gql`
  { 
    alert @client
  }
`});
console.log('data:', data);

Но я получил эту ошибку Missing selection set for object of type Alert returned for query field alert при запуске readQuery на экземпляре клиента. Похоже, что Alert не определено. Но я уже определил запрос Alert в typeDefs. Это работает нормально, если я изменю код запроса ниже, который я должен указать, что должно быть возвращено внутри { message }. Но, похоже, не использует схему. Я ожидаю, что мне не нужно указывать возвращаемые поля, если он возвращает все поля в объекте схемы. Я неправильно понимаю схему?

const data = client.readQuery({query: gql`
  { 
    alert @client {
      message
    }
  }
`});
console.log('data:', data);

Если я должен указать возвращаемые поля одно за другим, какой смысл определять схему?

1 Ответ

0 голосов
/ 24 июня 2019

Это ожидаемое поведение с GraphQL.Вам всегда нужно указывать внутри запроса, какие поля вы ожидаете.Таким образом, чтобы получить все данные, вы добавляете поля в запрос:

const data = client.readQuery({query: gql`
  { 
    alert @client {
      message
      type
      duration
    }
  }
`});
console.log('data:', data);

В спецификациях GraphQL есть открытый выпуск .

...