我在突变后在 apollo-client 中重新获取查询时遇到问题。希望有人能帮忙。
我的 graphql 模式有一个查询和一个突变:
type Query {
alerts(filter: AlertFilter!): AlertsResponse!
}
type Mutation {
closeAlert(input: CloseAlertRequest!): CloseAlertResponse!
}
alerts
查询接受状态 = OPEN 或 CLOSED 的 AlertFilter。它返回警报列表以及打开和关闭的警报计数。
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' },
},
},
],
});
}