Я использую 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
}
}
`;


Из документы:
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? Предполагая, что внутри этого объекта есть некоторые неизвестные свойства.