Кажется, это работает, но немного хакерский доступ к cache.watches
Set
?: S
Хитрость заключается в том, чтобы получить доступ к переменным кэша для данного запроса, сохранить его и выполнить повторное получение с заданными переменными запроса.В моем случае после создания элемента:
export const getGraphqlCacheVariables = (queryName, cache) => {
if (cache.watches) {
const watch = [...cache.watches].find(w => !!w.query[queryName]);
if (watch) {
return watch.variables;
}
}
};
Функция mutation
update
:
let variables;
const update = (cache, { data }) => {
if (data && data.createTask && data.createTask.task) {
variables = getGraphqlCacheVariables('GetTasks', cache);
}
}
И функция refetchQueries
:
const refetchQueries = () => {
if (variables && Object.keys(variables).length > 0) {
return [{ query: GET_TASKS, variables }];
}
return [];
}
Бот функции update и refetchQueries должны иметь доступ к переменной variables
Преимущество по сравнению с решением в статье Medium заключается в том, что вы не удаляете кэшированные данные.для данного запроса (GET_TASKS) с разными переменными.