想象一下以下查询:
query {
user {
id
}
SomeOtherStuff(id: <--- I want to pass the id obtained from user) {
id
}
}
Run Code Online (Sandbox Code Playgroud)
如何将从一个查询获得的参数传递给另一个查询?
在GraphQL中,将并行执行和解析请求的每个“级别”上的字段。在您的示例中,user
并且SomeOtherStuff
都是相同类型(根Query
类型)的两个字段-因此将同时解析它们。这意味着每个查询本质上都不知道另一个查询或另一个查询解决了什么。
您将不得不处理这种情况的客户端。换句话说,首先请求用户,解析ID的响应,然后发出第二个请求。
编辑:在Apollo中,您将为此目的使用compose:
const userQuery = gql`query User { user { id } }`;
const stuffQuery = gql`query SomeOtherStuff($id: ID) { someOtherStuff(id: $id){ stuff } }`;
export default compose(
graphql(userQuery, { name: 'userData' })
graphql(stuffQuery, { name: 'stuffData', options: ({userData:{id}={}}) => ({variables: {id}}) }),
)(YourComponent)
Run Code Online (Sandbox Code Playgroud)
我同意@DanielRearden。您应该制作类型解析器,以便您可以无限深入地了解图表。我在这里做了一个简单的服务器示例,显示了深厚的关系。因为所有名词字段都是引用,所以对于任何查询,它的深度都是无限的。
使用该服务器,您可以运行这样的查询,例如:
{
hero {
name
friends {
name
friends {
name
friends {
name
friends: {
name
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以,在你的例子中,结构如下:
query {
user {
id
otherStuff {
id
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4048 次 |
最近记录: |