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

Graphql React Apollo:如何在多个地方使用同一查询的结果,graphql,apollo,react-apollo,Graphql,Apollo,React Apollo,我们想知道我们是否理解如何在阿波罗中提问。我们的目标非常简单:我们需要应用程序中两个不同位置的graphQL数据。这两个地方都需要完成结果的信息以及数据是否准备好的信息 所以现在的问题是,在阿波罗做到这一点的最佳方式是什么?我们无法在文档中找到示例 同样的问题 我们认为同样的查询可以完成这项工作。因此,我们使用相同的graphql HOC和相同的查询来包装我们的组件 问题:这将导致查询执行两次。我的意思是-当然-因为我们叫它两次。但是我们认为apollo会注意到我们使用相同的参数调用相同的查询

我们想知道我们是否理解如何在阿波罗中提问。我们的目标非常简单:我们需要应用程序中两个不同位置的graphQL数据。这两个地方都需要完成结果的信息以及数据是否准备好的信息

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

  • 同样的问题 我们认为同样的查询可以完成这项工作。因此,我们使用相同的graphql HOC和相同的查询来包装我们的组件
  • 问题:这将导致查询执行两次。我的意思是-当然-因为我们叫它两次。但是我们认为apollo会注意到我们使用相同的参数调用相同的查询

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

  • 进入阿波罗商店 有没有一种推荐的方法可以用另一个HOC包装组件以获得apollo商店?如何使用“仍在提取”和“结果”信息访问正确的查询

  • 我们会很高兴,如果我们能做到如1所述,但就我们所见,这是不可能的。如果你能告诉我阿波罗号是怎么做的,那就太好了

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

    参考:

    我们使用的是相同的高阶组件(HOC)方法,并且运行良好

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

    也就是说,您确定该查询实际上在网络上被调用了两次吗?或者该操作只被调用两次而没有网络请求(请检查Chrome开发工具中的
    网络
    选项卡)

    Apollo的默认行为是先缓存
    ,因此您可能看到的是操作,而不是实际的网络请求:

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


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

    我们使用的是相同的高阶组件(HOC)方法,它运行良好

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

    也就是说,您确定该查询实际上在网络上被调用了两次吗?或者该操作只被调用两次而没有网络请求(请检查Chrome开发工具中的
    网络
    选项卡)

    Apollo的默认行为是先缓存
    ,因此您可能看到的是操作,而不是实际的网络请求:

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


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

    嘿。是的,我们确信它被调用了两次,因为我们在graphql服务器上看到了日志。据我所知,您引用的消息将在数据已经存在时从缓存中获取数据。但是,如果数据还没有准备好,而另一个组件正在调用同一个查询,该怎么办?因为这是我们的情况。因此,在我们的例子中,2个组件将在数据尚未就绪时调用查询,目标是两个组件都将显示“正在加载”或“挂起”状态。啊,我理解@您是否尝试过查询批处理?嘿是的,我们确信它被调用了两次,因为我们在graphql服务器上看到了日志。据我所知,您引用的消息将在数据已经存在时从缓存中获取数据。但是,如果数据还没有准备好,而另一个组件正在调用同一个查询,该怎么办?因为这是我们的情况。因此,在我们的例子中,2个组件将在数据尚未就绪时调用查询,目标是两个组件都将显示“正在加载”或“挂起”状态。啊,我理解@您是否尝试过查询批处理?