gatsby & graphql:过滤特定的单个图像

IT技术 reactjs graphql gatsby netlify gatsby-image
2021-04-28 21:27:39

我不太了解 graphql 或 gatsby,但我相信通过将其放入 gatsby-config.js,我的所有图像都已加载到 graphql 中

然后我尝试查询我可以使用的特定图像

这将返回我想要的内容,但我必须为此查询输入的 id 是7acfccd5-4aef-532b-8889-9d844ae2068b. 如果我把它放在我的代码中,这个 id 甚至会保持不变吗?有没有办法将 id 设置为更有意义的东西?

如果我将查询保存到一个变量中data,结果在Netlify 上 data.allImageSharp.edges[0]为 null,而在本地这个值将返回我需要的

我正在寻找查询单个图像的最佳方式不是多个图像。如果我可以设置自己的 ID,那么我可以查询这些。


更新

我在gatsby-source-filesystem 文档中找到了一个示例,但不知道如何将其添加到我的代码中

2个回答

有了这个片段:

{
  resolve: `gatsby-source-filesystem`,
  options: {
    name: `images`,
    path: path.join(__dirname, `src/assets/images`),
  },
},

基本上,您是在告诉将imagessrc/assets/images文件夹中找到的 GraphQL 模式,以便您能够通过 GraphQL 查询该文件夹中的所有内容。您正在指定数据的来源。

来自gatsby-source-filesystem 文档

该插件从文件创建文件节点。各种“转换器”插件可以将文件节点转换为各种其他类型的数据,例如 gatsby-transformer-json 将 JSON 文件转换为 JSON 数据节点,而 gatsby-transformer-remark 将 markdown 文件转换为 MarkdownRemark 节点,您可以从中查询 HTML 表示降价。

回答您的问题,当然,您可以对图像具有的任何属性或节点进行过滤和排序,例如名称、路径、扩展名等。/___graphql当您运行gatsby develop命令,您可能会在路径下找到一个有用的自动完成工具,用于查询. 这将帮助您检查可以查询和过滤哪些参数。

如果您有一个路径为 的图像src/images/exampleImage.jpg,则可以通过使用file而不是allImageSharp查询来按图像名称进行查询

query HeaderQuery {
  exampleImage: file(
    extension: {eq: "jpg"},
    name: {eq: "exampleImage"}
  ) {
    childImageSharp {
      fluid {
        src
        srcSet
        sizes
        srcSetWebp
      }
    }
  }
}

您也可以替换{extension: {eq: "jpg"}使用{extension: {regex: "/(jpg)|(jpeg)|(png)/"}任何扩展类型的查询文件。