gatsby 和 graphql:过滤特定的单个图像
gatsby & graphql : filtering for a specific single image
我不太了解 graphql 或 gatsby,但我相信通过将其放入我的 gatsby-config.js
,我的所有图像都已加载到 graphql 中
{
resolve: `gatsby-source-filesystem`,
options: {
name: `images`,
path: path.join(__dirname, `src/assets/images`),
},
},
然后我尝试查询我可以用
做的特定图像
query MyQuery {
allImageSharp(filter: {id: {eq: "7acfccd5-4aef-532b-8889-9d844ae2068b"}}) {
edges {
node {
sizes {
sizes
srcSet
src
aspectRatio
}
id
}
}
}
}
这 return 是我想要的,但是我必须为此查询输入的 ID 是 7acfccd5-4aef-532b-8889-9d844ae2068b
。如果我将它放入我的代码中,这个 id 是否会保持不变?有没有办法将 id 设置为更有意义的东西?
如果我将查询保存到变量 data
,结果是 Netlify data.allImageSharp.edges[0]
为 null,而本地此值将 return 我需要什么
我正在寻找查询单个图像的最佳方式。 不是多张 图片。
如果我可以设置自己的 ID,那么我可以查询这些。
更新
我在 gatsby-source-filesystem documentation 中找到了一个示例,但真的不知道如何将它添加到我的代码中
使用此代码段:
{
resolve: `gatsby-source-filesystem`,
options: {
name: `images`,
path: path.join(__dirname, `src/assets/images`),
},
},
基本上,您是在告诉您的 GraphQL 架构将在 src/assets/images
文件夹中找到 images
,这样您就可以通过 GraphQL 查询该文件夹中的所有内容。您正在指定数据源。
来自gatsby-source-filesystem documentation:
The plugin creates File nodes from files. The various “transformer”
plugins can transform File nodes into various other types of data e.g.
gatsby-transformer-json transforms JSON files into JSON data nodes and
gatsby-transformer-remark transforms markdown files into
MarkdownRemark nodes from which you can query an HTML representation
of the markdown.
回答你的问题,当然,你可以过滤和排序任何 属性 或图像具有的节点,例如名称、路径、扩展名等。你可能会找到一个有用的自动完成工具当您 运行 一个 gatsby develop
命令时,您在 /___graphql
路径下的查询。这将帮助您查看可以查询和过滤哪些参数。
如果您有一个路径为 src/images/exampleImage.jpg
的图像,您可以通过使用 file 而不是 allImageSharp[ 来查询图像名称=21=]。
query HeaderQuery {
exampleImage: file(
extension: {eq: "jpg"},
name: {eq: "exampleImage"}
) {
childImageSharp {
fluid {
src
srcSet
sizes
srcSetWebp
}
}
}
}
您也可以将{extension: {eq: "jpg"}
替换为{extension: {regex: "/(jpg)|(jpeg)|(png)/"}
来查询任何扩展类型的文件。
我不太了解 graphql 或 gatsby,但我相信通过将其放入我的 gatsby-config.js
,我的所有图像都已加载到 graphql 中 {
resolve: `gatsby-source-filesystem`,
options: {
name: `images`,
path: path.join(__dirname, `src/assets/images`),
},
},
然后我尝试查询我可以用
做的特定图像 query MyQuery {
allImageSharp(filter: {id: {eq: "7acfccd5-4aef-532b-8889-9d844ae2068b"}}) {
edges {
node {
sizes {
sizes
srcSet
src
aspectRatio
}
id
}
}
}
}
这 return 是我想要的,但是我必须为此查询输入的 ID 是 7acfccd5-4aef-532b-8889-9d844ae2068b
。如果我将它放入我的代码中,这个 id 是否会保持不变?有没有办法将 id 设置为更有意义的东西?
如果我将查询保存到变量 data
,结果是 Netlify data.allImageSharp.edges[0]
为 null,而本地此值将 return 我需要什么
我正在寻找查询单个图像的最佳方式。 不是多张 图片。 如果我可以设置自己的 ID,那么我可以查询这些。
更新
我在 gatsby-source-filesystem documentation 中找到了一个示例,但真的不知道如何将它添加到我的代码中
使用此代码段:
{
resolve: `gatsby-source-filesystem`,
options: {
name: `images`,
path: path.join(__dirname, `src/assets/images`),
},
},
基本上,您是在告诉您的 GraphQL 架构将在 src/assets/images
文件夹中找到 images
,这样您就可以通过 GraphQL 查询该文件夹中的所有内容。您正在指定数据源。
来自gatsby-source-filesystem documentation:
The plugin creates File nodes from files. The various “transformer” plugins can transform File nodes into various other types of data e.g. gatsby-transformer-json transforms JSON files into JSON data nodes and gatsby-transformer-remark transforms markdown files into MarkdownRemark nodes from which you can query an HTML representation of the markdown.
回答你的问题,当然,你可以过滤和排序任何 属性 或图像具有的节点,例如名称、路径、扩展名等。你可能会找到一个有用的自动完成工具当您 运行 一个 gatsby develop
命令时,您在 /___graphql
路径下的查询。这将帮助您查看可以查询和过滤哪些参数。
如果您有一个路径为 src/images/exampleImage.jpg
的图像,您可以通过使用 file 而不是 allImageSharp[ 来查询图像名称=21=]。
query HeaderQuery {
exampleImage: file(
extension: {eq: "jpg"},
name: {eq: "exampleImage"}
) {
childImageSharp {
fluid {
src
srcSet
sizes
srcSetWebp
}
}
}
}
您也可以将{extension: {eq: "jpg"}
替换为{extension: {regex: "/(jpg)|(jpeg)|(png)/"}
来查询任何扩展类型的文件。