使用 GraphQL 查询文件夹中的所有图像
Querying all images in folder using GraphQL
我目前正在学习 Gatsby.js 和 GraphQL 作为辅助技术,但在查询方面遇到了困难。我想查询文件夹中的所有图像,通过它们进行映射并将它们作为网格显示在反应组件中。我正在使用 gatsby-source-filesystem 但无法弄清楚如何专门处理该文件夹并从中获取所有图像。
我为源文件系统设置的插件如下所示。
{
resolve: `gatsby-source-filesystem`,
options: {
path: `${__dirname}/src/posts`,
name: 'posts',
},
},
{
resolve: `gatsby-source-filesystem`,
options: {
name: `images`,
path: `${__dirname}/src/assets/images`,
},
},
{
resolve: `gatsby-source-filesystem`,
options: {
name: `photos`,
path: `${__dirname}/src/assets/photos`,
},
},
我的图片在 src/assets/photos
感谢您的帮助!
您可以 select 使用 graphql 中的过滤器的特定文件夹。
尝试这样的事情:
query AssetsPhotos {
allFile(filter: {extension: {regex: "/(jpg)|(jpeg)|(png)/"}, relativeDirectory: {eq: "photos"}}) {
edges {
node {
id
name
}
}
}
}
其中 eq: photos
应更改为您在转到 GraphiQL 时获得的目标文件的相对目录结果和 运行 在 allFile
上的查询。
我喜欢在使用 gatsby-source-filesystem
插件时使用 sourceInstanceName
,如 plugin docs 中所述。
你的gatsby-config.js
{
resolve: "gatsby-source-filesystem",
options: {
path: `${__dirname}/content/legal`,
name: "legal", // IMPORTANT: the name of your source instance
},
}, {
resolve: "gatsby-source-filesystem",
options: {
path: `${__dirname}/content/blog`,
name: "blog",
},
}
然后您可以使用 filter
和 sourceInstanceName
:
在您的 GraphQL 查询中直接解决它们
export const query = graphql`
{
allFile(filter: {
extension: {eq: "png"},
sourceInstanceName: {eq: "blog"}
})
{
edges {
node {
childImageSharp {
fluid(maxWidth: 300, quality: 50) {
originalName
...GatsbyImageSharpFluid
}
}
}
}
}
}
与 relativeDirectory
相比,这样您就不必处理更改的相对路径,您可能会重构您的项目或其他任何东西。让 GraphQL 为您处理!
我目前正在学习 Gatsby.js 和 GraphQL 作为辅助技术,但在查询方面遇到了困难。我想查询文件夹中的所有图像,通过它们进行映射并将它们作为网格显示在反应组件中。我正在使用 gatsby-source-filesystem 但无法弄清楚如何专门处理该文件夹并从中获取所有图像。
我为源文件系统设置的插件如下所示。
{
resolve: `gatsby-source-filesystem`,
options: {
path: `${__dirname}/src/posts`,
name: 'posts',
},
},
{
resolve: `gatsby-source-filesystem`,
options: {
name: `images`,
path: `${__dirname}/src/assets/images`,
},
},
{
resolve: `gatsby-source-filesystem`,
options: {
name: `photos`,
path: `${__dirname}/src/assets/photos`,
},
},
我的图片在 src/assets/photos
感谢您的帮助!
您可以 select 使用 graphql 中的过滤器的特定文件夹。
尝试这样的事情:
query AssetsPhotos {
allFile(filter: {extension: {regex: "/(jpg)|(jpeg)|(png)/"}, relativeDirectory: {eq: "photos"}}) {
edges {
node {
id
name
}
}
}
}
其中 eq: photos
应更改为您在转到 GraphiQL 时获得的目标文件的相对目录结果和 运行 在 allFile
上的查询。
我喜欢在使用 gatsby-source-filesystem
插件时使用 sourceInstanceName
,如 plugin docs 中所述。
你的gatsby-config.js
{
resolve: "gatsby-source-filesystem",
options: {
path: `${__dirname}/content/legal`,
name: "legal", // IMPORTANT: the name of your source instance
},
}, {
resolve: "gatsby-source-filesystem",
options: {
path: `${__dirname}/content/blog`,
name: "blog",
},
}
然后您可以使用 filter
和 sourceInstanceName
:
export const query = graphql`
{
allFile(filter: {
extension: {eq: "png"},
sourceInstanceName: {eq: "blog"}
})
{
edges {
node {
childImageSharp {
fluid(maxWidth: 300, quality: 50) {
originalName
...GatsbyImageSharpFluid
}
}
}
}
}
}
与 relativeDirectory
相比,这样您就不必处理更改的相对路径,您可能会重构您的项目或其他任何东西。让 GraphQL 为您处理!