React Apollo:如何在多个地方使用同一查询的结果

时间:2017-10-16 10:03:48

标签: graphql apollo react-apollo

我们想知道我们是否理解如何在apollo中查询权利。我们的目标非常简单:我们需要在我们的应用程序中的2个不同位置使用graphQL的数据。如果数据准备就绪,两个地方都需要完成结果的信息和信息。

所以问题是现在在apollo中做到这一点的最佳方法是什么?我们无法在文档中找到示例。

  1. 相同的查询 我们认为同样的查询可以完成这项工作。因此,我们使用相同的graphql HOC包装我们的组件,其中包含相同的Query。
  2. 问题:这将导致查询将执行两次。我的意思是 - 当然 - 因为我们称之为两次。但我们认为apollo会注意到我们使用相同的参数调用相同的查询。

    1. 存放在自己的商店 是否有必要将信息存储在我们自己的redux商店中?如果是,我们需要用查询包装我们的第一个组件,并在信息仍然加载和查询结果时存储信息。

    2. 访问apollo商店 有没有推荐的方法用另一个HOC包装组件来获得apollo商店?你将如何使用"仍在获取"的信息来访问正确的查询。和"结果"

    3. 如果能够像1中所描述的那样做,我们会很高兴,但据我们所知,这是不可能的。如果你能告诉我Apollo-Way的做法,那将是很好的

      修改 我们遇到的问题尚未解决。我在github上发现了这个问题。所以他们知道这是一个问题"但尚未解决。因此,我们需要更改组件逻辑和调用查询。

      参考: https://github.com/apollographql/apollo-android/issues/646

1 个答案:

答案 0 :(得分:0)

我们使用相同的高阶分量(HOC)方法,并且运行良好。

如果您的目标是避免两次调用相同的查询,则可以将fetchPolicy设置为仅从缓存中提取的其他选项之一。

那就是说,你确定查询实际上是通过网络被调用了两次吗?或者仅在没有网络请求的情况下调用两次操作(请查看Chrome开发工具中的Network标签)?

Apollo的默认行为是cache-first,因此您可能会看到操作但不是实际的网络请求:

  

cache-first:这是默认值,我们总是首先尝试从缓存中读取数据。 如果完成查询所需的所有数据都在缓存中,那么将返回该数据。如果缓存结果不可用,Apollo将仅从网络中获取。此提取策略旨在最大限度地减少呈现组件时发送的网络请求数。

更新:另一个选项是query batching,这应该可以解决这个问题。