如何使用 GraphQL 从 Contentful 中查询图像?
Posted
技术标签:
【中文标题】如何使用 GraphQL 从 Contentful 中查询图像?【英文标题】:How do I use GraphQL to query an image from Contentful? 【发布时间】:2022-01-20 18:26:03 【问题描述】:我正在使用 Gatsby 构建一个基本站点,并将其连接到 Contentful。我将 2 个资产上传到 Contentful:
第一个资产如下所示:
除了标题是 test-two 之外,第二个资产 100% 相同。
如果我使用 about 查询并将 URL 传递到 img 标签中,我的图像将显示。但是,我正在尝试使用 GatsbyImage,但似乎无法找出问题所在。
我一直在尝试遵循 this 教程并使用,但我无法得到任何渲染。我的查询需要如何更改才能使用 gatsby-image?
【问题讨论】:
【参考方案1】:在这种情况下,您正在查询url
、filename
和contentType
。为了能够使用GatsbyImage
,您需要查询从 Gatsby 创建的节点(即gatsbyImageData
),它应该包含在 Contentful 资产节点的名称中。比如:
allContentfulAsset
edges
node
test
title
gatsbyImageData(layout: CONSTRAINED)
在 GraphiQL 游乐场 (localhost:8000/___graphql
) 中检查创建的节点。
完成后,在您的组件中,您应该能够执行以下操作:
import graphql from "gatsby"
import GatsbyImage, getImage from "gatsby-plugin-image"
function SomePage( data )
const image = getImage(data.allContentfulAsset.test)
return (
<section>
<GatsbyImage image=image alt=`Some alt text` />
</section>
)
export const pageQuery = graphql`
query
allContentfulAsset
edges
node
test
title
gatsbyImageData(layout: CONSTRAINED)
`
如果节点没有出现,请检查gatsby-config.js
文件中的配置。
⚠️ 免责声明
注意,您尝试使用的教程是使用 gatsby-image
(从 Gatsby v2 向后),其中渲染的组件是 Img
,在您使用 gatsby-image
时从 gatsby-image
导入(来自 Gatsby v3之后),从gatsby-plugin-image
导入。第一个已弃用,查询结构略有不同。正如您在分享的指南顶部看到的那样:
gatsby-image
包现已弃用。新的Gatsby image plugin 具有更好的性能、酷炫的新功能和更简单的 API。请参阅migration guide 了解如何升级。
【讨论】:
以上是关于如何使用 GraphQL 从 Contentful 中查询图像?的主要内容,如果未能解决你的问题,请参考以下文章
Gatsby + Contentful - 如何在不重新启动服务器的情况下在本地重做 GraphQL 查询(npm run dev)?
无法使用 GatsbyJS 从 Contentful 加载图像
GatsbyJs - 如何处理来自 Contentful 插件的空 graphql 节点
在 Gatsby 中使用 Graphql 和 Contentful 时图像不显示,道具类型失败:类型为“数字”的道具“图像”无效,预期为“对象”?