Имеется простая схема graphql, которая выглядит примерно так:

type Contact { id: ID! name: String } type Query { RecentContacts: [Contact] Contact(id: ID!): Contact } 

Если я запрашиваю недавние контакты:

 const GET_RECENT_CONTACTS = gql` query RecentContacts { RecentContacts { id name } }` {amp}lt;Query client={client} query={GET_RECENT_CONTACTS}{amp}gt; {({loading, error, data}) ={amp}gt; { /* etc... */ }} {amp}lt;/Query{amp}gt; 

И получать данные, например, о контактах с идентификаторами 1 и 2, которые кэшируются следующим образом:

 ROOT_QUERY RecentContacts: [Contact] 0: Contact:1 id: 1 name: Jack 1: Contact:2 id: 2 name: Jill 

Есть ли способ сообщить Apollo, что он может использовать уже кэшированные записи для запросов Contact(id: 1) и Contact(id: 2) не делая другого сетевого запроса, просто чтобы вернуть данные, которые уже существуют в кэше? ?

В частности, я бы хотел, чтобы этот запрос не RecentContacts сетевой запрос после запроса RecentContacts , поскольку необходимые ему данные уже находятся в кеше (хотя и возвращены из вызова другого запроса):

 const GET_CONTACT = gql` query Contact($id: ID!){ Contact(id: $id){ id name } } {amp}lt;Query client={client} query={GET_CONTACT} variables={{id: 1}}{amp}gt; {({loading, error, data}) ={amp}gt; {/* etc... */}} {amp}lt;/Query{amp}gt; 

Вы можете использовать перенаправление кеша, чтобы сделать именно это. Вот пример из документов, модифицированных для работы с вашей схемой:

 import { InMemoryCache } from 'apollo-cache-inmemory'; const cache = new InMemoryCache({ cacheRedirects: { Query: { User: (_, args, { getCacheKey }) ={amp}gt; getCacheKey({ __typename: 'User', id: args.id }) }, }, });