我想命名/嵌套查询变量,如下所示:
query ($params: {$id: ID!}) {
getUser(id: $params.id) {
email
username
}
}
带变量:
{
"params": {
"id": "42"
}
}
但它不是有效的查询。
但是查询如下:
query ($id: ID!) {
getUser(id: $id) {
email
username
}
}
带变量:
{
"id": "42"
}
工作得很好。
我想要这样做的原因是自动将query options发送到ApolloReact graphql
更高阶组件中,其中params
道具从反应路由器应用于包装组件。这个问题基本上与反应路由器无关,除了params
道具通过反应路由器应用于组件这一事实。
ApolloReact将尝试使用组件中的props自动构建变量对象,并且由于id
嵌套在props
中,因此无法找到它。
另一种方法是通过定义接收id
的{{1}}方法并在options
中返回变量对象来明确定义查找ownProps
的位置,但我想如果可能,请避免使用它。
答案 0 :(得分:2)
不,您无法在查询中使用该复合类型的字段。
我认为您最好的选择是创建以下功能:
const options = ({params: variables}) => ({variables})
并导出包装的组件,如下所示:
export default graphql(QUERY, {options})(Component)
这样,react-router传递的params属性将成为传递给查询的变量对象,你可以像这样使用它:
<Component id="1" otherVar="some value"/>
使用常规查询:
query ($id: ID!) {
getUser(id: $id) {
email
username
}
}