Вы можете использовать клиентский метод readFragment
для извлечения любого отдельного элемента из кэша.Для этого просто требуется идентификатор и строка фрагмента.
const todo = client.readFragment({
id,
fragment: gql`
fragment fooFragment on Foo {
id
bar
qax
}
`,
})
Обратите внимание, что id
здесь - это ключ кеша, возвращаемый функцией dataIdFromObject - если вы не указали пользовательскую функцию, то (при условииполя __typename и id или _id присутствуют) реализация по умолчанию просто:
${result.__typename}:${result.id || result._id}
Если вы предоставили свою собственную функцию dataIdFromObject, вам нужно будет указать любой идентификатор, возвращаемый этой функцией.
Как указывал @Herku, в зависимости от варианта использования также возможно использовать перенаправления кеша для использования данных, кэшированных для одного запроса, при разрешении другого.Это настроено как часть настройки вашего InMemoryCache
:
const cache = new InMemoryCache({
cacheRedirects: {
Query: {
book: (_, args, { getCacheKey }) =>
getCacheKey({ __typename: 'Book', id: args.id })
},
},
})
К сожалению, на момент написания этого ответа я не думаю, что есть какой-либо способ удалить кэшированный элемент по идентификатору.Здесь идет обсуждение здесь по этому вопросу (оригинальный выпуск здесь ).