【发布时间】:2020-09-09 23:13:21
【问题描述】:
我有一个针对 Markdown 文件的 graphql 查询,它从 Markdown 的前端请求 title、author 和 coverImg。
有些 Markdown 文件没有封面图片,当没有图片时,看起来 coverImg 的类型是 String
我正在使用gatsby-image,它使用sharp,如果coverImg 是一个对象而不是字符串,我想下降到coverImg 参数的子级
这是我的查询
query($path: String!) {
markdownRemark(fields: { slug: { eq: $path } }) {
frontmatter {
title
author
coverImg {
childImageSharp {
fluid(maxWidth: 600) {
src
srcSet
sizes
aspectRatio
}
}
}
}
}
}
如果我尝试这个,我会收到错误
There was an error in your GraphQL query:
Field "cover" must not have a selection since type "String" has no subfields.
This can happen if you e.g. accidentally added { } to the field "cover". If you didn't expect "cover" to be of type "String" make sure that your input source and/or plugin is correct.
看起来有graphql if statements,但我不知道如何使用这些有条件地分支到孩子。如果我可以添加类似
的内容,那就太好了 coverImg @skip(if: coverImg is String) {
【问题讨论】:
-
通常我处理这些的方式只是检查图像是否存在于组件本身中:
if (frontmatter.coverImg.childImageSharp) <Img fluid={frontmatter.coverImg.childImageSharp.fluid} />。这对你的情况不起作用吗? -
架构自定义可能会有所帮助github.com/gatsbyjs/gatsby/issues/18271
标签: reactjs graphql gatsby graphql-js