【发布时间】:2018-12-18 12:46:05
【问题描述】:
我有一个 Gatsby 项目,它对两种不同类型的内容进行了非常相似的 GraphQL 查询:常规页面和 wiki 文章。
分页
export const query = graphql`
query($slug: String!) {
page: contentfulPage(slug: {eq: $slug}) {
title
slug
body {
remark: childMarkdownRemark {
excerpt
html
headings {
value
depth
}
}
}
updatedAt(formatString: "D. MMM YYYY")
authors {
name
email
}
}
}
`
slug 的维基文章
export const query = graphql`
query($slug: String!) {
article: contentfulWikiArticle(slug: {eq: $slug}) {
title
slug
body {
remark: childMarkdownRemark {
excerpt
html
headings {
value
depth
}
}
}
updatedAt(formatString: "D. MMM YYYY")
authors {
name
email
}
+ section {
+ title
+ slug
+ }
+ subsection {
+ title
+ slug
+ }
}
}
`
除了 wiki 文章的附加部分和小部分之外,查询是相同的。为了保持干燥,我如何将页面字段移动到一个单独的片段中,尽管它是不同类型的,但也可以传播到 wiki 文章查询中? GraphQL 能否提供类似的东西:
fragment pageFields on [ContenfulPage, ContenfulWikiArticle] {
...
}
【问题讨论】:
-
好问题 我有类似的问题?你想清楚了吗?
-
@me-me 恐怕还没有。
-
不确定您是否已解决,这很难解释,但如果我看到源代码,我将能够以格式良好的方式回答,但考虑从组件中的 layout.js 制作“TemplateWrapper 组件”文件夹并为您在组件中构建的 Contentful 字段创建一个“LayoutfFagment”,然后声明共享数据或重复为 null 的字段,然后导出查询并过滤共享数据或字段。在这之后还有几步,如果你仍然卡住,我会伸出援手。
-
@NickC 感谢您的评论,但我真正要问的是 GraphQL 是否提供了一种本地方式来执行此操作。我不太明白你在暗示什么,但听起来有点老套。
-
使用 Apollo 将“本地”完成此操作
标签: graphql dry gatsby contentful