我的基本问题是查询的变量是否需要精确才能使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。有可能吗?
答案 0 :(得分:1)
我相信您会想要在@connection
和gql
的{{1}}定义中添加notesQuery
指令。您没有发布这些内容,因此很遗憾,我无法确切显示您的用例。
无论如何,measurementsQuery
指令将允许Apollo例如在@connection
上进行匹配,而忽略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
函数的工作方式,该方法不起作用。它只会忽略以上尝试获得比arg名称更好的分辨率的尝试,即不能超出getStoreKeyName()
。过滤器数组中与arg名称不匹配的任何字符串都将被忽略。
看起来您必须修改架构。
更多信息,请访问:https://www.apollographql.com/docs/react/features/pagination.html#connection-directive