【发布时间】:2020-05-11 15:26:13
【问题描述】:
我正在构建一个简单的投资组合网站。
在登陆页面上,我展示了不同项目的图片。
我正在映射所有项目
{projects.map(({ id, title, route, src }, index) => ())}
我想要的是当鼠标进入图像时在图像下方显示项目名称。
在您输入图像的那一刻,它会显示所有图像下方的所有名称。
(因为displayTitle 设置为真{displayTitle ? title : null})
OnmouseEnter 它应该只显示悬停的图像其标题。
关于如何解决此问题的任何建议或创造性解决方案?
这是整个组件
export const Main = () => {
const [projects, projectsSet] = useState([]);
const [displayTitle, setDisplayTitle] = useState(false);
useEffect(() => {
const projects = projectsLoader();
projectsSet(projects);
}, []);
return (
<>
<NavWrapper>
{projects.map(({ id, title, route, src }, index) => (
<ImageWrapper id={id} key={id}>
<NavLink
activeClassName="active"
className="Nav_link"
exact={true}
to={`/${route}`}
>
<div
onMouseEnter={() => {
setDisplayTitle(true);
}}
onMouseLeave={() => setDisplayTitle(false)}
style={flexStyle}
>
<ProjectImage src={src} alt={title} />
{displayTitle ? title : null}
</div>
</NavLink>
</ImageWrapper>
))}
</NavWrapper>
</>
);
};
我也为 OnMouseEnter 试过这个
if (index + 1 === id && document.getElementById(id).id) {
if (title.toLowerCase().replace(/\s/g, "") === route) {
setDisplayTitle(true);
}
}
}}
但可以理解的是,这具有相同的效果。
解决方案
我正在使用样式化组件
export const ProjectWrapper = styled.div`
position: relative;
`;
export const ProjectImage = styled.img`
max-width: 15rem;
max-height: 15rem;
margin: 3rem;
`;
export const Title = styled.div`
display: none;
${ProjectWrapper}:hover & {
display: block;
}
`;
【问题讨论】:
标签: javascript reactjs react-hooks styled-components