Мой основной вопрос заключается в том, должны ли переменные для запросов быть точными для работы refetchQueries. Или вы можете дать ему подмножество переменных, и он будет соответствовать похожим запросам.
Рассмотрим следующее....
<Query<NotesQuery, NotesQueryVariables>
query = {notesQuery}
variables = {{
input: {
notebookId: notebookContext.id,
first: 20
}
}}
>
</Query>
и следующая мутация:
client
.mutate<NoteCreateOrUpdateMutation, NoteCreateOrUpdateMutationVariables>({
mutation: noteCreateOrUpdateMutation,
variables: {
input: {
noteId: note ? note.id : undefined,
subjectIds: noteSubjects,
notebookId: notebookContext.id,
authorId: userContext.id,
content: noteContent,
context: noteCaption,
}
},
refetchQueries: [
{
query: notesQuery,
variables: { input: { notebookId: notebookContext.id } } as NotesQueryVariables
}
]
})
когда я делаю эту мутацию, она НЕ обновляет запрос заметки с нумерацией страниц
Если я добавлю параметр first: 20 -- он сработает.
Я хотел бы очистить все noteQueries, которые соответствуют заданным параметрам. Это возможно?


Я полагаю, вы захотите добавить @connection директивы к своим gql определениям notesQuery и measurementsQuery. Вы не опубликовали их, поэтому, к сожалению, я не могу показать вам, как именно это будет выглядеть для вашего варианта использования.
В любом случае, директива @connection позволит Apollo сопоставлять, например, notebookId, игнорируя при этом значение first.
К сожалению, вы упаковали весь свой ввод в объект input, и я не знаю, как вы могли бы выбрать только notebookId с помощью фильтра. Предполагая, что ваше определение gql выглядит примерно так для notesQuery:
const notesQuery = gql`
query notes($input: InputType!) {
notes(input: $input) @connection(key: "notes", filter: ["input['notebookId']"]) {
id
...
}
}
`;
^^^ К сожалению, это не сработает из-за того, как работает функция apollo-utilities/lib/storeUtils.js -> getStoreKeyName(). Он просто проигнорирует приведенную выше попытку получить лучшее разрешение, чем имя аргумента, т.е. не может выйти за пределы input. Любая строка в массиве фильтров, которая не соответствует имени аргумента, игнорируется.
Похоже, вам придется изменить вашу схему.
Дополнительная информация: https://www.apollographql.com/docs/react/features/pagination.html#connection-directive