4 回答
TA贡献1111条经验 获得超0个赞
问题是你在两个地方都有完全相同的组件和完全相同的 prop 值,因此无论你对值做什么,它们都会同时显示/隐藏displayBookCardHover。
诀窍是为每个值使用单独的值。像这样:
const [hoverIndex, setHoverIndex] = useState(-1);
...
const showCardHover = (index) => {
setHoverIndex(index);
}
const hiddenCardHover = () => {
setHoverIndex(-1);
}
...
<BookCard
...
onMouseEnter={() => showCardHover(0)}
...
>
<BookCardHover display={hoverIndex === 0}>
...
<BookCardHover display={hoverIndex === 1}>
希望你能明白。
顺便说一句, prop 没有“100”值visibility。它要么是“隐藏的”,要么是“可见的”。
TA贡献1821条经验 获得超6个赞
import React, { useState } from "react";
import "./style.css";
import { BooksSection, BookCard, BookCardHover } from "./Styled";
export default function App() {
const [displayBookCardHover, setDisplayBookCardHover] = useState({
boxOneHover: false,
boxTowHover: false
});
const showCardHover = box => {
if (box === 1) {
setDisplayBookCardHover(ps=>({ ...ps, boxOneHover: true }));
} else {
setDisplayBookCardHover(ps=>({ ...ps, boxTowHover: true }));
}
};
const hiddenCardHover = box => {
if (box === 1) {
setDisplayBookCardHover(ps=>({ ...ps, boxOneHover: false }));
} else {
setDisplayBookCardHover(ps=>({ ...ps, boxTowHover: false }));
}
};
return (
<div>
<BooksSection>
<BookCard
bgColor={"#000"}
color={"#fff"}
onMouseEnter={() => showCardHover(1)}
onMouseLeave={() => hiddenCardHover(1)}
>
<BookCardHover display={displayBookCardHover.boxOneHover}>
Hover One
</BookCardHover>
Box One
</BookCard>
<BookCard
bgColor={"#fff"}
color={"#000"}
onMouseEnter={() => showCardHover(2)}
onMouseLeave={() => hiddenCardHover(2)}
>
<BookCardHover display={displayBookCardHover.boxTowHover}>
Hover Two
</BookCardHover>
Box Two
</BookCard>
</BooksSection>
</div>
);
}
TA贡献1797条经验 获得超6个赞
您的代码的问题是 - 两个BookCardHover
组件都使用相同的参考状态来显示其状态displayBookCardHover
,因此,当一个组件更改 的值时displayBookCardHover
,它会自动反映在另一个组件上。
TA贡献1853条经验 获得超18个赞
我认为BookCard应该是一个组件。每个人都应该有自己的状态。在 App.js 中,您可以使用 BookCard 并传递 bgColor 和 color 以及您想要自定义每个 BookCard 的任何内容作为 props 并在其中使用它们。
添加回答
举报