我知道这个问题听起来有点复杂,但事实并非如此。
我会尽量用简单的方式解释它:
- 我正在为我的 Gatsby 网站的主页制作博客文章列表。
该列表由“框”组成,链接到帖子的每个框都有一个背景图像。
我将此背景图像传递给样式组件,它从我插入到主 < div > 元素中的道具值中获取图像(您将在下面找到示例)。
它工作正常,直到我尝试使用 src 下本地文件夹中的图像(而不是使用我简单地放在 frontmatter 上的在线链接)。
这是我过去所做的工作:
我将图像的 url 放在 markdown 文件的 frontmatter 上:
---
slug: "/post/my-post"
[...]
imghero: "https:/path/to/image-online.jpg"
---
然后用graphql查询它:
const LISTING_QUERY = graphql`
query BlogPostListing {
allMarkdownRemark(limit: 10, sort: {
order: DESC,
fields: [frontmatter___date]
}) {
edges {
node {
excerpt
frontmatter {
title
slug
date(formatString: "MMMM DD, YYYY")
imghero
}
}
}
}
}
`
之后,我将{node.frontmatter.imghero}插入到主 div 的道具上:
const Listing = () => (
<StaticQuery
query={LISTING_QUERY}
render={({allMarkdownRemark}) => (
allMarkdownRemark.edges.map(({node}) => (
<Article img_background={node.frontmatter.imghero} key={node.frontmatter.slug}>
[... etc ...]
</Article>
))
)}
/>
)
export default Listing
最后,我在 styled-component 中调用了img_background 属性:
const Article = styled.article`
background-image: url(${props => props.img_background};);
[... etc ...]
`
这种方法有效。
现在我想从我的“图像”文件夹中获取图像,而不是从随机 url。
- 我安装了gatsby-remark-images
- 将其设置在 gatsby-config.js 上,并将某些图像的路径放在 frontmatter 上。
- 使用http://localhost:8000/___graphql测试所有内容(并且有效)
通过 graphql 插入附加查询:
[...] frontmatter { date(formatString: "DD MMMM, YYYY") title imghero hero { childImageSharp{ fluid(maxWidth: 630) { ...GatsbyImageSharpFluid } } } [...]
我使用新路径修改组件上的节点:
<Article img_background={node.frontmatter.hero.childImageSharp.fluid} [...]> [...] </Article>
Gatsby Develop 编译良好。
但是后来我的主页完全是白色的。
浏览器的控制台说node.frontmatter.hero 是 "null"。我不知道还能做什么。
谢谢您的帮助。