想象一下以下查询:
query {
user {
id
}
SomeOtherStuff(id: <--- I want to pass the id obtained from user) {
id
}
}
如何将从一个查询获得的参数传递给另一个查询?
答案 0 :(得分:4)
在GraphQL中,每个&#34;级别的字段&#34;请求的执行和并行解决。在您的示例中,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)
答案 1 :(得分:3)
我同意@DanielRearden。你应该制作类型解析器,这样你就可以无限深入到图形中。我做了一个简单的服务器示例here,显示了深层次的关系。因为所有的名词字段都是引用,所以对于任何查询都是无限深的。
使用该服务器,您可以运行这样的查询,例如:
{
hero {
name
friends {
name
friends {
name
friends {
name
friends: {
name
}
}
}
}
}
}
因此,在您的示例中,将其结构如下:
query {
user {
id
otherStuff {
id
}
}
}
答案 2 :(得分:0)