首页 > 解决方案 > 如何将参数传递给graphql片段?

问题描述

将参数传递给 GraphQL 查询很容易。但是 GraphQL 片段呢?

这段代码包含一些带有参数(itemId)的完全正常的查询和我尝试做的提示(includeExtraResults):

export const GET_ITEM = gql`
  query GetItem($itemId: ID!, $includeExtraResults:BOOLEAN) {
    container {
      item(itemId: $itemId) {
        itemId
        someField
        innerItem(someExtraOption: $includeExtraResults) {
          ...InnerItemFragment
        }
      }
    }
  }
  ${INNER_ITEM_FRAGMENT}
`;

export const INNER_ITEM_FRAGMENT = gql`
  fragment InnerItemFragment on InnerItemType {
    innerItemId
    innerInnerItem(someExtraOption: $includeExtraResults) {
      someFields
    }
  }
  ${INNER_INNER_ITEM_FRAGMENT}
`;


export const INNER_INNER_ITEM_FRAGMENT = gql`
  /* (not detailed here) */
`;

当内部项目作为内部项目的一部分自动查询时,我不希望它们返回过滤器工作所基于的字段。客户也不知道逻辑。相反,我想使用参数,并且逻辑是在服务器端决定的。

尽管如此,他们的查询还是以需要(可选)参数“includeExtraResults”的方式实现的,该参数首先传递给 GetItem。

那么,有没有办法将“includeExtraResults”传递给内部片段?为了有意义,应该改变什么?在现实生活中,这是一个复杂的系统,具有许多层次的内部碎片。

标签: react-nativegraphql

解决方案


它不一样,但仍然相关:

您可以在片段中使用查询的变量:

query HeroComparison($first: Int = 3) {
  leftComparison: hero(episode: EMPIRE) {
    ...comparisonFields
  }
  rightComparison: hero(episode: JEDI) {
    ...comparisonFields
  }
}

fragment comparisonFields on Character {
  name
  friendsConnection(first: $first) {
    totalCount
    edges {
      node {
        name
      }
    }
  }
}

此信息来自官方指南


推荐阅读