Apollo позволяет вам управлять локальным состоянием с помощью директив @client. Таким образом, вы можете создать запрос, подобный приведенному ниже, чтобы получить один TODO на основе идентификатора.
query getTodoById(id: ID!) @client {
todo {
name,
id
}
}
mutation setTodoById(id: ID!, todo: Todo!) @client {
todo {
name,
id
}
}
Теперь вам нужно создать собственный клиентский преобразователь для запроса выше, чтобы Apollo знал, где он должен искать данные в кеше. Пользовательский распознаватель примет аргумент с именем getCachedKey
, который генерирует ключ объекта на основе typename
& Id
. Apollo использует этот сгенерированный идентификатор из пользовательского распознавателя для поиска данных в кэше (список задач).
Ваш настраиваемый распознаватель клиентов должен выглядеть примерно так:
cacheRedirects: {
Query: {
todo: (_, args, { getCacheKey }) =>
getCacheKey({ __typename: 'Todo', id: args.id })
},
};