You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Gatsby实现:当Boolean为True时显示Contentful横幅

问题修复方案

你的代码里有两个关键错误导致逻辑不生效:

1. 变量赋值错误

你把announcementBanner赋值成了data.contentfulAnnouncementBanner.bannerMessage(这是一个字符串),所以后续访问announcementBanner.display会得到undefined,自然无法触发显示逻辑。应该直接把整个横幅对象赋值给变量:

const announcementBanner = data.contentfulAnnouncementBanner

2. JSX结构不完整

代码里的片段语法<>没有闭合,且return语句的结构不完整,需要补全闭合标签。

另外,为了避免announcementBanner为null时出现报错,建议使用可选链操作符?.做安全访问。

修正后的完整代码:

const Header = () => {
  const data = useStaticQuery(graphql`
    query {
      contentfulCarousel(title: { eq: "homepage" }) {
        Images {
          id
          gatsbyImageData
          description
        }
      }
      contentfulAnnouncementBanner {
        bannerMessage
        display
      }
    }
  `)
  const announcementBanner = data.contentfulAnnouncementBanner
  return (
    <>
      {announcementBanner?.display && (
        <div className="announcementBanner">
          <h2>{announcementBanner.bannerMessage}</h2>
        </div>
      )}
      {/* 这里可以放Header的其他内容 */}
    </>
  )
}

额外优化建议

如果你的Contentful里可能存在多个Announcement Banner条目,建议在GraphQL查询里加上过滤条件,只获取display: true的条目,减少前端判断逻辑:

query {
  contentfulCarousel(title: { eq: "homepage" }) {
    Images {
      id
      gatsbyImageData
      description
    }
  }
  contentfulAnnouncementBanner(display: { eq: true }) {
    bannerMessage
    display
  }
}

这样前端只需判断announcementBanner是否存在即可显示横幅。

内容的提问来源于stack exchange,提问作者Kelsey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:30:51