GraphQL 在嵌套图中获取子边的附加数据
GraphQL fetching additional data of subedges in a nested graph
我的数据结构有点复杂,导致了一个深度嵌套的图。现在我总是 fetching/reloading 通过根查询。但是我认为这不是最好的方法,因为它总是需要服务器解析整棵树。
是否可以在不遍历整个树的情况下在第二个请求中获取/重新加载嵌套图中的额外 data/edges 个子边?
如果是怎么办?
例如:我有一个
RootQuery Spaces
+ ... Other Layers
+ Project
+ Edge Tasks
+ Edge SubTasks
+ Edge Assigned User
显示项目列表我没有在初始请求时加载任务。如果用户打开一个项目,我只想花边加载该项目的任务,而不重新加载 parent/root 或从 RootQuery 开始的整个树。
简答:
不,您不能查询未列为根查询类型定义字段的数据。
长答案:
虽然如果不向根查询添加字段是不可能的,但您只需添加一个带有项目 ID 参数的 tasks
查询就可以实现您正在寻找的行为。然后在您的客户端中,当您查询 projects
时,不要询问他们的任务优势,而只是在需要时发送单独的查询 tasks(projectId: ID)
。
在 apollo 的 GitHunt 示例中,他们正在做同样的事情来查询每个 repo 的评论列表,甚至在用户将鼠标悬停在 repo 的 link 上时预取数据。那当然是半急切的行为而不是懒惰,所以你可以在那里做出自己的选择。
GraphQL 的未来功能将使您能够 @stream
客户端准备就绪时的任务列表,以及 @defer
您希望在没有的情况下继续的任何字段。您的场景可能有更好的解决方案,不需要发送第二个查询。
有关更多信息,请在此处查看李的演讲:https://youtu.be/ViXL0YQnioU?t=12m50s
我的数据结构有点复杂,导致了一个深度嵌套的图。现在我总是 fetching/reloading 通过根查询。但是我认为这不是最好的方法,因为它总是需要服务器解析整棵树。
是否可以在不遍历整个树的情况下在第二个请求中获取/重新加载嵌套图中的额外 data/edges 个子边?
如果是怎么办?
例如:我有一个
RootQuery Spaces
+ ... Other Layers
+ Project
+ Edge Tasks
+ Edge SubTasks
+ Edge Assigned User
显示项目列表我没有在初始请求时加载任务。如果用户打开一个项目,我只想花边加载该项目的任务,而不重新加载 parent/root 或从 RootQuery 开始的整个树。
简答: 不,您不能查询未列为根查询类型定义字段的数据。
长答案:
虽然如果不向根查询添加字段是不可能的,但您只需添加一个带有项目 ID 参数的 tasks
查询就可以实现您正在寻找的行为。然后在您的客户端中,当您查询 projects
时,不要询问他们的任务优势,而只是在需要时发送单独的查询 tasks(projectId: ID)
。
在 apollo 的 GitHunt 示例中,他们正在做同样的事情来查询每个 repo 的评论列表,甚至在用户将鼠标悬停在 repo 的 link 上时预取数据。那当然是半急切的行为而不是懒惰,所以你可以在那里做出自己的选择。
GraphQL 的未来功能将使您能够 @stream
客户端准备就绪时的任务列表,以及 @defer
您希望在没有的情况下继续的任何字段。您的场景可能有更好的解决方案,不需要发送第二个查询。
有关更多信息,请在此处查看李的演讲:https://youtu.be/ViXL0YQnioU?t=12m50s