【问题标题】:Is it possible to use nested / namespaced query variables in a GraphQL query?是否可以在 GraphQL 查询中使用嵌套/命名空间查询变量?
【发布时间】:2017-02-19 00:43:33
【问题描述】:

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

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 prop 是由react router 应用到组件之外,这个问题本质上与react router 无关。

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

另一种方法是专门定义在哪里可以找到id,方法是定义一个options 方法,该方法接收ownProps 并返回graphql 中的变量对象,但我想尽可能避免它。

【问题讨论】:

    标签: graphql apollo-server apollostack


    【解决方案1】:

    不,您不能在查询中使用该复合类型的字段。

    我认为您最好的选择是创建以下函数:

    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
      }
    }
    

    【讨论】:

    • 感谢您的回答,我并没有尝试使用包含所有内容的输入,而是尝试利用 Apollo React 提供的默认功能:“默认情况下,graphql 将尝试选择从 ownProps 的查询中补齐所有缺失的变量。
    • 当然!删除该部分并添加您想要的实际结果,这样会更有意义。
    猜你喜欢
    • 2019-04-12
    • 2011-12-01
    • 2021-01-29
    • 2020-12-02
    • 2019-01-28
    • 2019-05-30
    • 2018-06-13
    • 2016-09-21
    • 2021-08-26
    相关资源
    最近更新 更多