readQuery
не возвращает копию
Вы можете проверить это сейчас, прочитав, затем изменив, а затем снова прочитав запрос, чтобы увидеть, изменились ли результаты
const { todos } = cache.readQuery({ query: GET_TODOS });
todos[0].completed = null;
const data.todos = cache.readQuery({ query: GET_TODOS });
console.log(data.todos[0].completed) // true or false
Исходный код
Если мы посмотрим на исходный код, то увидим, что readQuery сводится к этой функции graphqlAnywhere
const result = graphqlAnywhere(
readStoreResolver,
query,
rootIdValue,
context,
variables,
{
fragmentMatcher: fragmentMatcherFunction,
resultMapper,
},
);
return {
result,
complete: !context.hasMissingField,
};
Каждая функция graphqlAnywhere начинается с нового объекта, прямой ссылки на хранилище кеша нет, поэтому вам не нужно беспокоиться о создании копии перед мутацией.
https://github.com/apollographql/apollo-client/blob/master/packages/graphql-anywhere/src/graphql.ts
https://github.com/apollographql/apollo-client/blob/91f5116ce830151e6bedf92e10550c607984e11c/packages/apollo-cache-inmemory/src/readFromStore.ts#L175