css - 通过内联样式动态设置背景 Div 图像时不显示 | Next.js
问题描述
我正在尝试通过使用地图和外部 js 文件将图像存储为对象来从组件渲染图像,然后通过它们设置循环以将其设置为创建的每个 div 的不同背景图像(如果有意义)。我将提供代码以更清楚地说明我想要完成的工作,在地图过程中我试图定位一个对象方法,但我相信它不起作用,因为我的图像都没有显示。
组件文件:WorkImages.js
export default function WorkImage({workImages}) {
return (
<div>
{
workImages.map((work) => {
return (
<div style={{backgroundImage: `url(${work.image})` }} id='work-img' className='work-img' key={work.id}>
<a href=""><div className="overlay">View Work</div></a>
</div>
);
})
}
</div>
)
}
循环时我从中检索图像的对象文件(image.js):
import img1 from '../public/images/filler1.jpg'
import img2 from '../public/images/filler2.jpg'
import img3 from '../public/images/filler3.jpg'
const image = [
{
id: 1,
image: img1
},
{
id: 2,
image: img2
},
{
id: 3,
image: img3
}
]
export default image;
主文件我试图用动态背景图像(Work.js)渲染出 div:
import Aos from 'aos'
import 'aos/dist/aos.css'
import {useEffect, useState} from 'react'
import WorkImage from './WorkImage';
import image from './image'
export default function Work() {
const [workImages, setImage] = useState(image);
useEffect(() => {
Aos.init({duration: 2000});
}, []);
return (
<section id='work' className='work-section'>
<div data-aos='fade-left'>
<h1 className="work-header">- RECENT WORK -</h1>
<div className="showcase-wrapper">
<WorkImage workImages={workImages} />
</div>
</div>
</section>
)
}
解决方案
将您的图像对象更改为:
const images = [
{
id: 1,
image: '/images/filler1.jpg'
},
{
id: 2,
image: '/images/filler2.jpg'
},
{
id: 3,
image: '/images/filler3.jpg'
}
]
export default images;
import
如果图像已经在public
目录中,则不需要图像。
参考:静态文件服务
对于那些面临类似问题且不使用public
目录的人:
当你做这样的事情时import img from 'path/to/img.ext'
,img
它不是源,它是一个类型的对象StaticImageData
,它的定义如下:
type StaticImageData = {
src: string;
height: number;
width: number;
placeholder?: string;
};
因此,在这种情况下,您需要使用img.src
URL。像这样的东西也适用于您,而不是上述解决方案:
{backgroundImage: `url(${work.image.src})` }
此外,在此特定代码中,由于文件按顺序正确命名,因此不需要具有图像对象。像这样的东西也应该起作用:
Array.from({ length: 3 }, (_, i) => i + 1).map((i) => (
<div
style={{ backgroundImage: `url(/images/filler${i}.jpg)` }}
id={`work-img-${i}`}
className='work-img'
key={`work-${i}`}
>
<a href='/'>
<div className='overlay'>View Work</div>
</a>
</div>
));
PS:改变你的id
和key
在map
. 您id
为多个元素设置相同,并且key
不推荐设置索引。
推荐阅读
- c# - C# Thread.Run 在 For 循环内的行为是什么
- node.js - 来自 Blob NodeJS 的视频流
- python - 烧瓶会话不持久化数据
- python - Python pandas excel输出不是确定的形式
- python - 如何查看编译后的python的结果?
- freeswitch - freeswtich docker 容器连接
- angular - 我们如何在具有角度 2 的剑道网格中使用多选下拉菜单
- .htaccess - 在 htaccess RewriteEngine 中不适用于特定目录
- android - 如何在 CoordinatorLayout 上使用 BottomSheet 提升 RecyclerView
- python - 运行 python 脚本并将参数捕获到另一个 python 脚本中