在GraphQL中可以使用动态查询别名吗?

时间:2018-11-09 07:56:59

标签: graphql gatsby

我目前正在Gatsby文档站点上工作。一个特定页面基于其本地文件路径结构的正则表达式搜索,检索HTML / CSS组件的各种README文件的内容,这些文件分为三类。我现在使用3个独立的别名查询来检索非常相似的数据,而我的DRY编码器认为使用一个和一个$ group-type变量(将在下面的代码中替换原子,分子和生物)应该是可能的或类似的东西。因为我是GraphQL的真正新手,所以我不确定这是否可行,而且我似乎找不到在线进行此操作的人。这是我到目前为止的内容:

export const pageQuery = graphql`
  query($path: String!) {
    pageData: 
      markdownRemark(fields: { slug: { eq: $path } }) {
        html
        fields {
          slug
          title
        }
        fileAbsolutePath
      }


    atoms:
      allMarkdownRemark(sort: {order: ASC, fields: [fields___title]}, limit: 1000, filter: {fileAbsolutePath: {regex: "/dl-atoms/"}}) {
        edges {
          node {
            fields {
              slug
              title
            }
          }
        }
      }

    molecules:
      allMarkdownRemark(sort: {order: ASC, fields: [fields___title]}, limit: 1000, filter: {fileAbsolutePath: {regex: "/dl-molecules/"}}) {
        edges {
          node {
            fields {
              slug
              title
            }
          }
        }
      }
    organisms:
      allMarkdownRemark(sort: {order: ASC, fields: [fields___title]}, limit: 1000, filter: {fileAbsolutePath: {regex: "/dl-organisms/"}}) {
        edges {
          node {
            fields {
              slug
              title
            }
          }
        }
      }
  }
`;

1 个答案:

答案 0 :(得分:1)

您可以定义要在查询中使用的片段。这些允许您一次定义选择集,然后仅通过引用片段的名称来使用它。请注意,您必须知道要为其指定选择集的类型的名称。

export const pageQuery = graphql`
  query($path: String!) {
    pageData: 
      markdownRemark(fields: { slug: { eq: $path } }) {
        html
        fields {
          slug
          title
        }
        fileAbsolutePath
      }

    atoms:
      allMarkdownRemark(sort: {order: ASC, fields: [fields___title]}, limit: 1000, filter: {fileAbsolutePath: {regex: "/dl-atoms/"}}) {
        ...MarkdownRemarkFields
      }

    molecules:
      allMarkdownRemark(sort: {order: ASC, fields: [fields___title]}, limit: 1000, filter: {fileAbsolutePath: {regex: "/dl-molecules/"}}) {
        ...MarkdownRemarkFields
      }
    organisms:
      allMarkdownRemark(sort: {order: ASC, fields: [fields___title]}, limit: 1000, filter: {fileAbsolutePath: {regex: "/dl-organisms/"}}) {
        ...MarkdownRemarkFields
      }
  }

  fragment MarkdownRemarkFields on MarkdownRemarkConnection {
    edges {
      node {
        fields {
          slug
          title
        }
      }
    }
  }
`;

Gatsby文档here中提到了片段。