Background Div Images not displaying when setting them via Inline Styles Dynamically | Next.Js(通过内联样式动态设置背景Div图像时不显示它们|Next.Js)
本文介绍了通过内联样式动态设置背景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
目录中,则不需要import
图像。
参考:Static File Serving
对于面临类似问题且未使用public
目录的用户:
您这样做import img from 'path/to/img.ext'
,img
不是源,它是StaticImageData
类型的Object,定义如下:
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:更改map
中的id
和key
。您为多个元素设置了相同的id
,而且不建议将索引设置为key
。
这篇关于通过内联样式动态设置背景Div图像时不显示它们|Next.Js的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:通过内联样式动态设置背景Div图像时不显示它们|Next.Js
猜你喜欢
- 我不能使用 json 使用 react 向我的 web api 发出 Post 请求 2022-01-01
- 在不使用循环的情况下查找数字数组中的一项 2022-01-01
- 是否可以将标志传递给 Gulp 以使其以不同的方式 2022-01-01
- 如何显示带有换行符的文本标签? 2022-01-01
- 为什么我的页面无法在 Github 上加载? 2022-01-01
- 如何调试 CSS/Javascript 悬停问题 2022-01-01
- 从原点悬停时触发 translateY() 2022-01-01
- 使用 iframe URL 的 jQuery UI 对话框 2022-01-01
- 如何向 ipc 渲染器发送添加回调 2022-01-01
- 为什么悬停在委托事件处理程序中不起作用? 2022-01-01