2017-10-16 56 views
0

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

所以现在的问题是什么是在阿波罗做这个最好的方法?我们无法在文档中找到示例。

  1. 相同的查询 我们认为相同的查询可以完成这项工作。所以我们用同样的Query在其中包含了我们的组件。

问题:这将导致查询将执行两次。我的意思是 - 当然 - 因为我们称它为两次。但是我们认为apollo会注意到我们使用相同的参数调用相同的查询。

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

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

我们会很高兴如果我们可以像1中所描述的那样做,但据我们所知,这是不可能的。这将是很好,如果你能告诉我什么将做阿波罗方式这样做

编辑 我们有问题还没有解决。我在github上发现了这个问题。所以他们知道这是一个“问题”,但尚未解决。所以我们需要改变我们的组件逻辑和调用查询。

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

回答

0

我们使用相同的高次成分(HOC)的方式,它的工作好。

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

这就是说,你确定查询实际上是在网络上被调用两次吗?或者仅在没有网络请求的情况下才会调用该操作两次(在Chrome开发工具中检查您的Network选项卡)?

阿波罗的默认行为是cache-first,所以它可能是你所看到的行动,但不是实际的网络请求:

缓存第一:这是默认值,其中,我们总是试图读取数据先从缓存中取出。 如果完成查询所需的所有数据都在缓存中,那么将返回该数据。如果缓存的结果不可用,Apollo将只从网络中获取。此提取策略旨在尽量减少渲染组件时发送的网络请求数量。

更新:另一种选择是query batching,这应该解决这个问题。

+0

嘿。是的,我们确定它被调用了两次,因为我们在graphql服务器上看到了日志。据我了解你的引用消息,当数据已经存在时,它将从缓存中获取数据。但是如果数据还没有准备好,另一个组件调用相同的查询呢?因为这是我们的情况。所以在我们的例子中,2个组件会在数据尚未准备好的时候调用查询,目标是两个组件都将显示“加载”或“待定”状态。 – TJR

+0

啊,我明白了。 @TJR你试过查询配料? https://dev-blog.apollodata.com/query-batching-in-apollo-63acfd859862 – samcorcos

相关问题