1

我想像这样命名/嵌套查询变量:

query ($params: {$id: ID!}) {
  getUser(id: $params.id) {
    email
    username
  }
}

与变量:

{
  "params": {
    "id": "42"
  }
}

但这不是一个有效的查询。

但是像这样的查询:

query ($id: ID!) {
  getUser(id: $id) {
    email
    username
  }
}

与变量:

{
  "id": "42"
}

会工作得很好。

我想这样做的原因是自动将查询选项发送到 ApolloReactgraphql高阶组件,其中的paramsprop 应用于来自 react 路由器的包装组件。这个问题本质上与 react router 无关,除了paramsprop 是由 react router 应用到组件之外。

ApolloReact 将尝试使用组件中的 props 来自动构建 variables 对象,并且由于id嵌套在props其中无法找到它。

id另一种方法是通过定义一个options接收ownProps和返回变量对象的方法来专门定义查找位置,graphql但如果可能的话,我想避免它。

4

1 回答 1

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
  }
}
于 2016-10-10T15:26:32.330 回答