如何使用Apollo和React Router避免嵌套路由/查询组件的请求瀑布?

时间:2019-08-31 21:16:40

标签: react-router apollo react-apollo apollo-client

如果我有一些深层嵌套的路由,每个路由都包含一个查询组件,是否可以使用任何路由解决方案和apollo客户端组合这些查询或并行运行它们?最好是react-router。

例如

/parent/child/:id/something

父路由将有一个查询并获取一些数据,子路由(具有特定ID)也将获取一些数据,最终第三个查询可能在“某物”视图中以请求其他数据。

因此,当我直接进入/parent/child/:id/something时,如何在不执行3个graphql请求而仅执行1个graphql请求的情况下获取所有数据?如果不可能,那么至少如何使请求并行运行,这样我就不必等待第一个,第二个和第三个?

令我大吃一惊的是,尚未为Apollo客户找到有关此性能瓶颈以及与之对抗的潜在解决方案的任何信息。

我已经研究了用于设置静态路由的react-router-config,但仍不确定要在其中写入什么逻辑来解决问题?

1 个答案:

答案 0 :(得分:0)

是的,Apollo不支持您的用例。 如果要将3个请求打包为1个,也许解决方案是在graphQLServer中创建一个新查询,并在后端服务中调用3次,然后返回所有期望的数据,因此您的客户端只需要调用一次即可,而不是几个次。而您在客户端所做的一切只会传递道具
如果第二个需要第一个的ID,而第二个需要第二个的ID,那么如何并行运行它。这是不可能的


更新后的答案:如果所有这些查询都需要一个ID,您可以按照我的想法进行。希望我没弄错你的问题。

query bigQuery($id: String!){
   query1(id: $id) {
      field1
      field2
   }
   query2(id: $id) {
      field1
      field2
   }
   query3(id: $id) {
      field1
      field2
   }
}