是否可以在GraphQL中使用动态查询别名



我目前正在Gatsby文档网站上工作。一个特定的页面检索HTML/CSS组件的各种自述文件的内容,这些组件根据其本地文件路径结构的regex搜索分为三个不同的类别。目前,我正在使用3个单独的别名查询来检索非常相似的数据,我的DRY编码器认为这应该可以通过一个$group类型的变量(它将取代下面代码中的原子、分子和生物体(或类似的东西来实现。由于我是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
}
}
}
}
}
`;

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

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

在盖茨比的文档中提到了碎片。

最新更新