gatsby graphql 无法在“Query”类型上查询字段“allTribeEvents”
Posted
技术标签:
【中文标题】gatsby graphql 无法在“Query”类型上查询字段“allTribeEvents”【英文标题】:gatsby graphql Cannot query field "allTribeEvents" on type "Query" 【发布时间】:2021-11-13 04:15:48 【问题描述】:我正在使用 gatsby 和 wordpress 来显示来自 wordpress 的事件日历 API 的事件。我正在使用插件gatsby-source-tribe-events
访问allTribeEvents
graphql 字段。问题是,如果我没有在 wordpress 上发布任何事件,则不会创建字段 allTribeEvents
,然后如果我在 gatsby 上运行我的 graphql 查询,我会得到
Cannot query field "allTribeEvents" on type "Query"
所以我的问题是如何检查graphql中是否存在该字段并根据它有条件地查询。
我的代码:
React 组件显示事件:
export default function Events()
const data = useStaticQuery(graphql`
query EventsQuery
allTribeEvents
...
`);
//then I return my component based on the data
所以关键是如果不存在帖子"allTribeEvents"
不会在 grapqhl 中创建,我会收到错误
【问题讨论】:
【参考方案1】:所以我的问题是如何检查graphql中是否存在该字段并查询 有条件地基于它。
简短的回答,你不能。本质上是因为当您查询某些内容时,您期望得到一些结果。这里的问题是,由于定义了 worfklow(WordPress -> Gatsby -> GraphQL 节点创建),步骤被破坏了。
在这种情况下,理想的解决方案是定义一个Custom GraphQL Schema Definition,它可以帮助您告诉盖茨比allTribeEvents
可以是null
。
另一种可能的解决方法(不太干净)是创建一个空的部落事件(可能有空格或某种定义的字段)并在前端处理它以避免打印它(假设你有一个事件命名为“-”,如果您在 GraphQL 查询中找到该字段,请过滤它)。
【讨论】:
以上是关于gatsby graphql 无法在“Query”类型上查询字段“allTribeEvents”的主要内容,如果未能解决你的问题,请参考以下文章
“无法读取未定义的属性‘节点’” - Gatsby/GraphQL/Prismic
如何在带有 gatsby 的 graphql 查询中使用正则表达式