如何使用 Gatsby 显示 Contentul 图像

How display a Contentul image with Gatsby

我正在尝试显示存储在 Contentful 上的单个图像。这是我获取 url 和图像标题的查询:

contentfulAsset(title: {eq: "kevin"}) {
  file {
    url
    fileName
  }
}

我使用了 gatsby-image 插件,但是没有说明知道如何使用这个查询来显示单个图像。

他们只用多个图像和一个节点来解释情况...

{node.image[0].resolutions.src && (
  <Img
    style={{ margin: 0 }}
    resolutions={node.image[0].resolutions}
  />
)}

我的第一个建议是在开发时始终使用 GraphiQL 页面。它让您了解如何在您的组件上使用查询结果。

http://localhost:8000/___graphql

您的查询取决于您希望如何显示图像。

假设您在 Contentful.

Asset 内容模型上存储了字段名称为 myImage 的图像

显示 HTML5 <img /> 标签

如果您想使用简单的 <img /> 标签

您的查询

contentfulAsset(title: { eq: "kevin"}}) {
  title
  file {
    url
  }
}

你的组件

// ...
const MyComponent = props => {
  const myImage = props.data.contentfulAsset;

  return <img src={myImage.file.url} alt={myImage.title} />
}

用gatsby-image插件显示

如果您想利用 gatsby-image 插件,您首先需要知道您是想在查询中使用 resolutions 还是 sizes 子项。

有关详细信息,请参阅 gatsby-image documentation

然后您可以使用 Fragment 的查询 gatsby-source-contentful

https://www.gatsbyjs.org/packages/gatsby-image/#gatsby-source-contentful

您的查询

假设我们想要在加载时显示具有模糊效果的响应图像,格式为 Webp

contentfulAsset(title: { eq: "kevin"}}) {
  title
  sizes(quality: 100) {
    ...GatsbyContentfulSizes_withWebp
  }
}

Note: by default, the resolutions and sizes quality are set to 50. That's why I set it to 100 in this query

你的组件

const MyComponent = props => {
  const myImage = props.data.contentfulAsset;

  return <Img sizes={myImage.sizes} alt={myImage.title} />
}

Like most of official Gatsby plugins, you can find a very good example in the examples folder on the GitHub repository:

https://github.com/gatsbyjs/gatsby/tree/master/examples/using-contentful