【问题标题】:How to perform multiple queries with Apollo graphql HOC?如何使用 Apollo graphql HOC 执行多个查询?
【发布时间】:2020-02-05 01:31:15
【问题描述】:

我正在编写一个网络应用程序,我需要查询 Apollo 的本地状态以及远程 API。 Apollo graphql HOC 不允许发送多个查询,但提供了一些 compose 功能。但似乎@apollo/react-hoc 包没有它。不幸的是,将本地状态请求编写成远程状态请求不起作用(根据 DevTools,请求已发送,但未提供数据)。 Redux 的compose 无论如何都没有帮助(嗯,我很清楚为什么会这样)。 没有 React hooks 解决这个问题的最佳方法是什么?

【问题讨论】:

  • 您希望多个查询同时运行还是链接在一起?
  • @DamianGreen 它可以是并发的,也可以先是 API,然后是本地
  • 我不完全确定你的问题,你可以在你的 React 组件中创建多个声明性 <Query> 组件

标签: reactjs graphql apollo react-apollo react-hoc


【解决方案1】:

根据@apollo/react-hoc docs,您似乎可以通过将一个查询嵌套在另一个查询中来运行多个查询。

默认情况下,graphql 钩子将数据作为data 属性注入,因此对于多个查询,如果没有额外的配置,它将无法工作。 config.name 来救援,因此您可以为注入的道具指定不同的名称,而不是 data

export default(
  graphql(
    query1, 
    {name: "data1"}
  )(
    graphql(
      query2, 
      {name: "data2"}
    )(YourComponent)
  )
)

看起来太冗长了。所以recompose(本质上是redux)compose 会帮助你:

export default compose(
  graphql(query1, {name: "data1"}),
  graphql(query2, {name: "data2"})
)(YourComponent);

说实话,这种方法(使用compose)在他们的文档中有所描述,但由于它位于描述config 的中间位置,我认为最好将示例放在这里供任何人在搜索时找到为主题。

【讨论】:

  • 请注意,文档中的示例实际上使用了recompose中的compose函数,而不是redux,尽管两者基本上是samething
  • 是的,不错。也感谢您添加到文档的链接,错过了。
  • @skyboyer 这些查询将同时运行或链接在一起。意味着第二个查询将等待第一个查询完成?
  • @KrishanKantSharma 按顺序排列。如果你想让它们并行运行,use hooks - 你的组件可能有任意数量的钩子,它们会并行提取不相关的数据。
猜你喜欢
  • 2018-10-07
  • 1970-01-01
  • 2020-05-13
  • 2016-11-30
  • 2020-08-20
  • 2020-01-25
  • 2021-04-19
  • 2021-05-06
  • 1970-01-01
相关资源
最近更新 更多