У меня возникла проблема с повторной выборкой запросов в apollo-client после мутации. Надеюсь, кто-нибудь сможет помочь.
Моя схема Graphql имеет один запрос и одну мутацию:
type Query {
alerts(filter: AlertFilter!): AlertsResponse!
}
type Mutation {
closeAlert(input: CloseAlertRequest!): CloseAlertResponse!
}
Запрос alerts принимает AlertFilter со статусом = OPEN или CLOSED. Он возвращает список оповещений вместе с количеством открытых и закрытых оповещений.
Мутация closeAlert закрывает указанное оповещение.
Я пытаюсь повторно получить запрос alerts при каждом вызове мутации closeAlert. Это делается для того, чтобы у меня был самый последний список оповещений + последнее количество открытий/закрытий.
Вот как я закодировал свою мутацию closeAlert. Он пытается повторно получить запрос alertsPage после мутации.
export function useCloseAlert() {
return useMutation(closeAlertDocument, {
refetchQueries: ['alertsPage'],
});
}
Мой запрос alertsPage закодирован следующим образом:
const alertsPageDocument = graphql(/* GraphQL */ `
query alertsPage($filter: AlertFilter!) {
alerts(filter: $filter) {
alerts {
id
...AlertItem
}
counts {
status
count
...AlertCountItem
}
}
}
`);
Однако, глядя на расширение Apollo Client DevTools, я вижу, что в кеше есть два разных запроса alertsPage (см. снимок экрана ниже): один для фильтра status = "OPEN" и другой для фильтра status = "Closed". Мутация только повторно извлекает запрос для фильтра status = "OPEN" — я вижу, как количество открытий уменьшается, а количество закрытых увеличивается. Однако запрос фильтра status = "CLOSED" не перезагружается, и счетчики вообще не меняются.
Вопрос: Как я могу сказать клиенту Apollo, чтобы он возвращал все запросы alertsPage, независимо от входных значений?


Отвечая на свой же вопрос...
Чтобы обновить оба запроса (для status=OPEN и status=CLOSED), мне пришлось изменить refetchQueries следующим образом:
export function useCloseAlert() {
return useMutation(closeAlertDocument, {
refetchQueries: [
{
query: AlertsPageDocument,
variables: {
filter: { status: 'OPEN' },
},
},
{
query: AlertsPageDocument,
variables: {
filter: { status: 'CLOSED' },
},
},
],
});
}