我在组件中使用map via state显示了3个按钮,但当我单击其中任何一个按钮时,所有按钮的内容都会同时显示。我不知道该怎么办了,我已经坐了3天,什么都想不起来了。请帮助我
import React, { useRef } from "react";
import s from "./Shop.module.css";
import { useState } from "react";
export const Shop = () => {
const card = [
{
name: "Brands",
cat: ["Adidas", "Nike"],
show: false,
id: 1,
},
{
name: "Size",
cat: ["43", "43,5"],
show: false,
id: 2,
},
{
name: "Type",
cat: ["Sneakers", "Slippers"],
show: false,
id: 3,
},
];
const [active, setActive] = useState(null);
const handleToggle = () => {
setActive(!active);
};
return (
<div className={s.container}>
<div className={s.brandInner}>
{card.map((i, index) => {
return (
<div className={s.brandCard} key={i.id}>
<button className={`${s.brandBtn}`} onClick={handleToggle}>
{i.name}
</button>
<div className={`${s.openCard} ${active ? "" : `${s.dNone}`}`}>
<ul className={s.brandList}>
{i.cat.map((elem) => {
return (
<li key={elem} className={s.brandItem}>
{elem}
</li>
);
})}
</ul>
<button className={s.brandOpenBtn}>Apply</button>
</div>
</div>
);
})}
</div>
</div>
);
};
我也试过使用ref,但没有任何结果
4条答案
按热度按时间z18hc3ub1#
代码中存在逻辑错误。您的
active
是显示所有卡片的true
或不显示任何卡片的false
。一种方法是将当前活动卡的索引保存在
active
状态中:pengsaosao2#
您需要单独管理状态
lnlaulya3#
你需要跟踪“卡片”列表中每一项的状态。这里有一个可能的替代方案,希望能有所帮助。
vnzz0bqm4#
查看此代码: