无论输入参数如何,都在apollo-client中重新获取查询

问题描述 投票:0回答:1

我在突变后在 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
查询,无论输入值如何?

graphql apollo-client
1个回答
0
投票

回答我自己的问题...

为了重新获取两个查询(对于 status=OPEN 和 status=CLOSED),我必须按如下方式更改

refetchQueries

export function useCloseAlert() {
  return useMutation(closeAlertDocument, {
    refetchQueries: [
      {
        query: AlertsPageDocument,
        variables: {
          filter: { status: 'OPEN' },
        },
      },
      {
        query: AlertsPageDocument,
        variables: {
          filter: { status: 'CLOSED' },
        },
      },
    ],
  });
}

© www.soinside.com 2019 - 2024. All rights reserved.