Graphql 盖茨比:如何处理siteMetadata中未定义的字段?
我想根据是否定义了Graphql 盖茨比:如何处理siteMetadata中未定义的字段?,graphql,gatsby,Graphql,Gatsby,我想根据是否定义了logo字段来构建站点标题(如果未定义,将使用站点标题) gatsby config.js: module.exports={ 站点元数据:{ 标题:“你好,网络”, logo:“/images/logo.png” } } 查询: const query=graphql` { 场地{ 站点元数据{ 标题 标志 } } } 上面的操作很好,但是如果我删除徽标字段 我阅读了盖茨比文档中的模式定制部分,但没有找到任何适用的内容(我是否遗漏了什么?) 我目前的解决方案是将logo设
logo
字段来构建站点标题(如果未定义,将使用站点标题)
gatsby config.js:
module.exports={
站点元数据:{
标题:“你好,网络”,
logo:“/images/logo.png”
}
}
查询:
const query=graphql`
{
场地{
站点元数据{
标题
标志
}
}
}
上面的操作很好,但是如果我删除徽标
字段
我阅读了盖茨比文档中的模式定制部分,但没有找到任何适用的内容(我是否遗漏了什么?)
我目前的解决方案是将logo
设置为一些“虚拟内容”。虽然它可以工作,但它显然不是一个优雅的解决方案,随着项目的发展,它也有一些缺点
屏幕截图:
签出并删除
createTypes
可用于定义、修复或扩展表示某些应用程序数据的Gatsby GraphQL类型。把它想象成一个逃生舱,礼貌地告诉盖茨比你的数据的形状
盖茨比根据构建时可用的数据推断模式。如果您试图查询一个不存在的字段,您将得到一个生成错误
使用createTypes
可以告诉盖茨比logo
字段是sitematadata
类型上的可为空的String
。现在,如果在您的数据源中找不到该字段,您将得到一个空值,但是盖茨比可以成功地构建它
// gatsby-node.js
exports.sourceNodes = ({ actions }) => {
const { createTypes } = actions
const typeDefs = `
type SiteSiteMetadata implements Node {
logo: String
}
`
createTypes(typeDefs)
}
请注意,其余字段(标题、描述、作者)不必提供,它们仍将由盖茨比的类型推断处理