Dim*_*huk 10 reactjs graphql gatsby
我目前正在学习Gatsby.js和GraphQL作为补充技术,并被查询所困扰。我想查询一个文件夹中的所有图像,将它们映射成槽并将它们显示在网格中的react组件中。我正在使用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`,
},
},
Run Code Online (Sandbox Code Playgroud)
我的图片在src / assets / photos中
谢谢你的帮助!
您可以使用graphql中的过滤器选择特定的文件夹。
尝试这样的事情:
query AssetsPhotos {
allFile(filter: {extension: {regex: "/(jpg)|(jpeg)|(png)/"}, relativeDirectory: {eq: "photos"}}) {
edges {
node {
id
name
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
eq: photos当您转到GraphiQL并在上运行查询时,应在何处更改为要获取的目标文件的相对目录结果allFile。
我喜欢sourceInstanceName在使用gatsby-source-filesystem插件文档中记录的插件时使用。
您的 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",
},
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用filterand直接在 GraphQL 查询中解决它们sourceInstanceName:
export const query = graphql`
{
allFile(filter: {
extension: {eq: "png"},
sourceInstanceName: {eq: "blog"}
})
{
edges {
node {
childImageSharp {
fluid(maxWidth: 300, quality: 50) {
originalName
...GatsbyImageSharpFluid
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
与 相比relativeDirectory,这种方式您永远不必处理更改的相对路径,您可能会重构您的项目或其他任何内容。就让 GraphQL 为您处理吧!
| 归档时间: |
|
| 查看次数: |
2380 次 |
| 最近记录: |