【发布时间】:2022-07-20 23:16:14
【问题描述】:
我有一个反应应用程序,我在组件中呈现此信息:
const navigation = [
{
name: "Services",
description: "Our services",
href: "#",
subMenu: [
{ name: "Management" },
{ name: "Development" },
{ name: "Specialists" },
],
},
{
name: "Experts",
description: "our experts",
href: "#",
subMenu: [
{ name: "Engineers" },
{ name: "Project managers" },
{ name: "Developers" },
{ name: "Cloud solutions" },
],
},
所以“描述”是每个子菜单的“标题”,“名称”是子菜单中的每个项目。
我正在设置以下状态:
const [ShowSubMenu, setShowSubMenu] = useState(false);
这是我在组件中呈现子菜单的地方:
{navigation.map((item) => (
<>
<div
onClick={() => setShowSubMenu(!ShowSubMenu)}
className=" border-b-2 justify-between pb-4 pl-2 font-bold flex "
>
<h3 className=" text-roboto">{item.description}</h3>
<div className="border-solid border-b-2"></div>
<ChevronDownIcon
className={ShowSubMenu ? "rotate-90 h-5 w-5" : "h-5 w-5 "}
/>
</div>
<div className=" flex flex-col">
{item.subMenu.map((sm) => (
<div
key={sm.name}
className={!ShowSubMenu ? "hidden" : " pl-2 pt-2"}
>
{sm.name}
</div>
))}
</div>
</>
))}
我明白了,因为我的子菜单会根据状态打开,它会打开所有子菜单。我该如何解决,以便它知道单击了哪个项目并因此只打开该项目的子项?我认为“关键”道具会让它弄清楚这一点。除非必要,否则我不想为每个项目设置单独的 useState。感谢您的帮助!
TLDR:单击更改打开所有子菜单的状态。只想使用一个 useState 语句只打开单击的项目的子菜单。
【问题讨论】:
-
你能为此创建一个代码框吗?
-
在处理称为...索引的数组时有一些非常有用的东西!因此,在这里,您可以使用应该打开的菜单的索引,而不是使用布尔值来表示您的状态。
标签: reactjs next.js tailwind-css