【发布时间】:2021-08-23 16:37:20
【问题描述】:
目前,我的页面中有卡片视图的手风琴样式。当用户点击一张卡片时,卡片的颜色应该随着它的字体颜色而改变。目前要做到这一点,我正在使用 setState 和条件渲染来更改正在工作的点击卡片的颜色,但它正在更改我所有卡片的颜色,甚至是未点击的卡片。如何制作它,使其仅针对当前点击的卡片进行更改。
代码:
const [clicked, setClicked] = useState(false);
<div className="row">
{items &&
items.map((item) => (
<div className="col-md-6 faqpadding">
<Accordion
className="cardHeight"
style={{
backgroundColor: clicked ? "#fff" : "#0e2043",
boxShadow: "0px 4px 22px 9px rgba(0, 0, 0, 0.17)",
border: "1px solid #919191",
color: clicked ? "#0e2043" : "#E3AB50",
padding: "20px",
}}
>
<AccordionSummary
expandIcon={<ExpandMoreIcon />}
aria-controls="panel1a-content"
id="panel1a-header"
onClick={() => setClicked(!clicked)}
>
<Typography
className={classes.heading}
style={{ textAlign: "center" }}
>
{item.Title}
</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>{item.Content}</Typography>
</AccordionDetails>
</Accordion>
</div>
))}
</div>
代码沙盒:https://codesandbox.io/s/nifty-nash-ps8m7?file=/src/App.tsx
【问题讨论】:
-
请尝试创建最小代码来重现问题。我建议你用 li 元素替换你的代码。
标签: javascript reactjs