Как я могу использовать `схему` в клиентском кеше apollo?

Я использую apollo-client в проекте реагирования для управления состоянием пользовательского интерфейса. Я определяю тип схемы для мутации аполлона, но, похоже, он не работает.

Ниже показано, как я создаю экземпляр apollo client.

const cache = new InMemoryCache();

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

Ниже приведен код определения схемы типа. Как видите, я создал возвращаемый тип showErrorAlert для Alert.

export const alertTypeDefs = gql`
  type Alert {
    id: ID!
    message: String!
    type: String!
    duration: Int!
  }
  extend type Mutation {
    showErrorAlert(message: String!): Alert
  }
`;

Я использую приведенный ниже код для отправки мутации. Как видите, он не возвращает duration в возвращаемом объекте. Но приложение работает без ошибок. Кажется, что тип не влияет на приложение.

gql`
  mutation showErrorAlert($message: String!) {
    showErrorAlert(message: $message)  @client {
      id
      message
      type
    }
  }
`;
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
1
0
375
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из документы:

You can optionally set a client-side schema to be used with Apollo Client, through either the ApolloClient constructor typeDefs parameter, or the local state API setTypeDefs method... This schema is not used for validation like it is on the server because the graphql-js modules for schema validation would dramatically increase your bundle size. Instead, your client-side schema is used for introspection in Apollo Client Devtools, where you can explore your schema in GraphiQL.

Другими словами, единственная точка предоставления typeDefs для локального состояния — это возможность запрашивать локальное состояние через GraphiQL в Apollo Client Devtools.

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

И как вы должны запрашивать объект JSON, хранящийся в вашем локальном кеше Apollo? Предполагая, что внутри этого объекта есть некоторые неизвестные свойства.

rmartrenado 09.10.2019 10:56

Другие вопросы по теме