javascript - GraphQL 片段的片段

标签 javascript graphql

我有一个像这样的 GraphQL 查询:

import { gql } from 'apollo-boost';

export default gql`
  {
    pageHomeCollection(limit: 1) {
      items {
        navigationLinkLeft {
          ... on PageBasic {
            slug
            title
          }
          ... on PageShop {
            title
          }
          ... on PostCollection {
            slug
            title
          }
        }
        navigationLinkRight {
          ... on PageBasic {
            slug
            title
          }
          ... on PageShop {
            title
          }
          ... on PostCollection {
            slug
            title
          }
        }
        title
      }
    }
  }
`;

navigationLinkLeftnavigationLinkRight 请求的数据是相同的,因此我想避免重复。我了解片段,但不确定是否可以提取 3 ... on 因为我不确定片段是什么类型。这可能吗?

最佳答案

是的,您可以嵌套片段。假设 navigationLinkLeftnavigationLinkRight 具有相同的类型,您可以执行以下操作:

{
  pageHomeCollection(limit: 1) {
    items {
    navigationLinkLeft {
      ...YourFragment
    }
    navigationLinkRight {
      ...YourFragment
    }
    title
  }
}

fragment YourFragment on SomeInterfaceOrUnionType {
  ... on PageBasic {
    slug
    title
  }
  ... on PageShop {
    title
  }
  ... on PostCollection {
    slug
    title
  }
}

如果 navigationLinkLeftnavigationLinkRight 确实具有相同的类型,则此操作将不起作用。充其量,您只能避免重复字段本身:

{
  pageHomeCollection(limit: 1) {
    items {
    navigationLinkLeft {
      ...NavigationLinkLeftFragment
    }
    navigationLinkRight {
      ...NavigationLinkRightFragment
    }
    title
  }
}

fragment NavigationLinkLeftFragment on PageHomeNavigationLinkLeft {
  ...PageBasicFragment
  ...PageShopFragment
  ...PostCollectionFragment
}

fragment NavigationLinkRightFragment on NavigationLinkRight {
  ...PageBasicFragment
  ...PageShopFragment
  ...PostCollectionFragment
}

fragment PageBasicFragment on PageBasic {
  slug
  title
}

fragment PageShopFragment on PageShop {
  title
}

fragment PostCollectionFragment on PostCollection {
  slug
  title
}

上面避免使用内联片段,但如果您不需要在其他地方按名称引用片段,则始终可以使用内联片段。所以你也可以这样做:

navigationLinkLeft {
  ...PageBasicFragment
  ...PageShopFragment
  ...PostCollectionFragment
}
navigationLinkRight {
  ...PageBasicFragment
  ...PageShopFragment
  ...PostCollectionFragment
}

关于javascript - GraphQL 片段的片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59590186/

相关文章:

javascript - useMutation 返回的突变函数不传递变量

Python Graphene 处理多对多关系

javascript - 如果服务器端使用Node js,为什么需要异步呢?

javascript - 从浏览器外部调用 Javascript 函数?

Javascript函数获取输入值

javascript - 如何将页面模板拆分为单独的组件,每个组件都查询数据?

项目贡献者的 github graphql 查询

javascript - Canvas 游戏 : My food disappears

php - Wordpress 将 "&&"更改为 "&&"

vue.js - 从 apollo 缓存中读取查询,该查询尚不存在,但所有信息已存储在缓存中