reactjs - 使用 gatsby 博客数据在循环内渲染一个反应组件
问题描述
我有我的组件 Images.js
function Images() {
return (
<StaticQuery
query={query}
render={data => (
<div>
{data.allImageSharp.nodes.map(image => (
<img
className="w-40 h-40 object-cover object-center"
src={image.fluid.src}
alt="random user"
/>
))}
</div>
)}
/>
);
}
export default Images;
现在它基本上返回 6 个图像。当我尝试按以下方式为每张卡片渲染图像时,当然,它不起作用:
function Blog() {
return (
<div className="min-h-screen overflow-hidden">
<Navbar />
<div className="max-w-4xl mx-auto py-12 lg:py-16 ">
<h2 className="text-3xl font-extrabold tracking-tight text-gray-900 sm:text-4xl">
<span className="block">Coming soon!</span>
<span className="block text-indigo-600">I am just learning stuff about headless CMS and will build a blog here with strapi.io. Hang in!</span>
</h2>
</div>
<StaticQuery
query={query}
render={data => (
<div className="p-10 grid grid-cols-1 sm:grid-cols-1 md:grid-cols-3 lg:grid-cols-3 xl:grid-cols-3 gap-5">
{data.allStrapiArticles.edges.map(({ node:article })=> (
<div className="rounded overflow-hidden shadow-lg">
<Images />
<ConsoleLog>{ Images }</ConsoleLog>
<h3 key={article.strapiId}>{article.title}</h3>
</div>
))}
</div>
)}
/>
<Footer />
</div>
);
}
export default Blog;
有没有办法使用这个组件为每张卡片显示一个图像?也许有钥匙?
解决方案
你也在映射你的图像,所以基本上发生的事情是你所有的图像都在一张卡上渲染 n 次(n 是你的数组的长度),你遇到的问题是<Images/>
建议
您可以更改查询的结构并将图像数据包含到文章数据中,并将图像 URL 作为道具传递给图像组件,它应该看起来像这样
function Images({src}) {
return (
<div>
<img
className="w-40 h-40 object-cover object-center"
src={src}
alt="random user"
/>
</div>
)}
/>
);
}
export default Images;
和这样的博客组件
{data.allStrapiArticles.edges.map(({ node:article })=> (
<div className="rounded overflow-hidden shadow-lg">
<Images src={article.img} />
<ConsoleLog>{ Images }</ConsoleLog>
<h3 key={article.strapiId}>{article.title}</h3>
</div>
))}
推荐阅读
- javascript - 有没有一种有效的方法可以将许多文档快速上传到 Google Firestore?
- java - 缓解 Java 中针对 https 请求的会话劫持
- javascript - 使用来自 Axios.get() 的数据在我的 React 组件中呈现
- javascript - 当对象是函数时,为什么 module.export 返回未定义?
- python - 从 pytest_generate_tests 方法在 junit xml 中添加日志
- angular - 具有分页、过滤、排序性能问题的 Angular 9 自定义表格
- swift - 简化 Swift 枚举
- python - 快捷操作符在 python 中究竟是如何工作的?
- mysql - ERROR 1172 (42000): 结果在 mysql 存储过程中包含多于一行
- html - Vuetify 如何将卡片移动到叠加层的右下角