Apollo 客户端 fetchPolicy 问题 - 查询调用了两次

Posted

技术标签:

【中文标题】Apollo 客户端 fetchPolicy 问题 - 查询调用了两次【英文标题】:Apollo client fetchPolicy issues - query called twice 【发布时间】:2021-03-20 18:21:03 【问题描述】:

我正在使用 @apollo/client 3.2.0 和 react。我有一个使用 useQuery 挂钩检索数据的组件。该查询类似于以下查询:

query getChartData($year: Int!, $type: String!) 
  first_series_data(kpi: "SOME_KPI", year: $year, orderBy: "week", type: $type) 
    edges 
      node 
        value
        week
      
    
  
  second_series_data(kpi: "SOME_KPI", year: $year, type: $type) 
    edges 
      node 
        date
        value
      
    
  

正如您在查询中看到的,我有两个变量:yeartype。两者都在组件中作为 props 传递,并且该组件在同一个视图中呈现两次,使用不同类型的 props。

问题fetchPolicy 选项有关。如果我使用cache-and-networknetwork-only 获取策略之一,则会调用其中一个查询两次。当我使用no-cache 时不会发生这种情况。所以我认为这是一个缓存冲突,因为查询是相似的,但我不确定,我不知道如何解决这个问题。

你有什么想法吗?

【问题讨论】:

您找到解决方案了吗?我也有同样的问题... 不,我不得不改变我的观点和查询以避免这种情况,但它有时仍然会发生。我也打开了这张相关的票,也许那里的东西可以帮助你:github.com/apollographql/apollo-client/issues/7436 【参考方案1】:

此问题已在 3.4 中“修复”:https://github.com/apollographql/apollo-client/issues/7436

enter image description here

【讨论】:

以上是关于Apollo 客户端 fetchPolicy 问题 - 查询调用了两次的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 fetchPolicy='cache-and-network' 直接使用 apollo-client API 进行查询?

在 apollo-client 的 useQuery 中使用 fetchPolicy='cache-and-network' 不会更新 fetch 上的缓存更多

如何为 Apollo GraphQL 客户端禁用 InMemoryCache?

如何正确输入 Apollo Client defaultOptions?

Apollo 查询从缓存中获取了错误的数据

React、Apollo 2、GraphQL、身份验证系统