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 中格式化日期

Gatsby graphql 解析器查询未返回所有字段

如何在带有 gatsby 的 graphql 查询中使用正则表达式

未捕获的类型错误:无法使用 Gatsby 和 graphQl 读取未定义的属性“数据”

Gatsby - GraphQL - StaticQuery 标签 - 由于查询字符串的奇怪行为,站点无法编译