使用 apollo useQuery 时有没有办法禁用 apollo-link-dedup?

Posted

技术标签:

【中文标题】使用 apollo useQuery 时有没有办法禁用 apollo-link-dedup?【英文标题】:Is there a way to disable apollo-link-dedup when using apollo useQuery? 【发布时间】:2020-02-01 22:15:23 【问题描述】:

概述

我有一个渲染两个子组件的组件。子组件使用 apollo 的 useQuery 向服务器发出请求。问题是因为使用apollo-client时包含apollo-link-dedup,所以只有一个请求被发送到服务器。

我尝试将上下文设置为 forceFetch: true 指定的 here 但这似乎不适用于钩子。

这是查询:

// Generated query from @graphql-codegen/cli
import  useGetUploadUrlsQuery  from 'types/graphql'

useGetUploadUrlsQuery(
  fetchPolicy: 'network-only',
    context: 
     forceFetch: true,
    ,
  )

注意:传入唯一变量会绕过重复数据删除。任何人都可以提出的任何不那么老套的解决方案/解决方法都会有所帮助。

谢谢!

【问题讨论】:

如果请求相同且同时发生,为什么要触发两个单独的请求? 嘿@DanielRearden,这是因为每个查询都返回一个唯一的上传 URL,在这种情况下,我有两个上传表单都需要一个唯一的上传 URL。 有趣的用例。似乎是文档问题。请参阅下面的答案。 嘿@DanielRearden,添加deduplication: false 似乎不起作用。我也根据您链接的文档尝试了queryDeduplication: false,但这也不起作用 【参考方案1】:

这可能是文档问题。我认为传递给context 的正确密钥是deduplication,其值为false

useGetUploadUrlsQuery(
  fetchPolicy: 'network-only',
  context: 
   queryDeduplication: false,
  ,
)

注意here。 apollo-link-dedup 如自述文件中所指示的那样“默认包含”并不是真的——逻辑可能是,但链接本身不是。

【讨论】:

以上是关于使用 apollo useQuery 时有没有办法禁用 apollo-link-dedup?的主要内容,如果未能解决你的问题,请参考以下文章

apollo 的 useQuery 数据在 client.resetStore() 之后没有更新

Apollo useQuery 钩子不会使用 writeQuery() 方法从缓存中获取更新。没有看到错误

如何从 Apollo 客户端的 useQuery 获取响应头

@apollo/client 反应钩子 useQuery() 数据未定义

使用 Jest 模拟 @apollo/react-hooks useQuery

使用 TypeScript 反应 Apollo useQuery 钩子