react-router - 如何使用 Apollo 和 React Router 避免嵌套路由/查询组件的请求瀑布?
问题描述
如果我有一些深度嵌套的路由,每个路由都包含一个查询组件,有没有办法组合这些查询或使用任何带有 apollo 客户端的路由解决方案并行运行它们?最好是反应路由器。
例如。
/parent/child/:id/something
父路由将有一个查询并获取一些数据,子路由(具有特定 id)和最终的第三个查询可能在“某物”视图中以请求其他数据。
所以当我直接去的时候,我/parent/child/:id/something
怎样才能得到所有的数据而不做 3 个 graphql 请求而只做 1 个呢?如果那不可能,如何至少使请求并行运行,这样我就不必等待第一个、第二个和第三个?
令我大吃一惊的是,尚未为 Apollo 客户找到任何有关此性能瓶颈和解决它们的潜在解决方案的信息。
我已经查看了 react-router-config 以设置静态路由,但仍然不确定要在其中写入什么逻辑来解决问题?
解决方案
是的,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
}
}
推荐阅读
- hpc - 如何在没有 sudo 权限的情况下在 HPC 上运行 Popper
- python - 是否可以从数据库进行 django 翻译?
- graphql - 测试 GraphQl 护照上下文
- java - 未调用杰克逊模块反序列化器
- vue.js - v-on:click 不起作用 - 动态添加的 html 元素
- laravel - Laravel 一对一(多态)不仅仅适用于特定模型
- reactjs - 为什么我们使用扩展运算符或 object.assign
- python - 熊猫:表的一部分方法的首选顺序
- kotlin - 在泛型类中创建具有 initialCapacity 的泛型 ArrayList
- sql - SQL如何获取父母及其所有孩子和孩子的孩子......等