javascript - 在反应中输出嵌套列表
问题描述
这不应该那么困难,但我的大脑已经厌倦了试图弄清楚它。我似乎无法弄清楚如何遍历我的列表并输出一个 ul 列表。我有两个不同的数组对象,一个包含父节点,第二个包含子节点。父节点的键为 submenu:true|false,具体取决于它们是否有子节点。这是我到目前为止所做的:
小部件数组
{
label:string,
documentUrl:string,
submenu:boolean
}
widgetArray.map((widget:any, index:number) => {
if (widget.submenu) {
return subDocumentMenu.map((document:any) => {
if (widget.label === document.parent) {
return (
<li key={index}>{widget.label}
<ul>
<li key={index}><button onClick={() => toggleDocumentOverlay(document.dataUrl, document.label)} className={`${widget.label === widgetName ? 'active' : ''}`}>{document.label}</button></li>
</ul>
</li>
)
}
});
} else {
return <li key={index}><button onClick={() => toggleDocumentOverlay(widget.dataUrl, widget.label)} className={`${widget.label === widgetName ? 'active' : ''}`}>{widget.label}</button></li>
}
});
我意识到父节点将被输出两次,但我对如何将其中断以便父节点只输出一次,而子节点循环有点困惑。
预期的最终结果将是:
<ul>
<li>label</li>
<li>label
<ul>
<li>label</li>
<li>label</li>
<li>label</li>
</ul>
</li>
<li>label</li>
</ul>
解决方案
你<li> </li>
在错误的地方返回旅游。试试这种方式
if (widget.submenu) {
return (
<li key={index}>
{widget.label}
{subDocumentMenu.map((document) => {
if (widget.label === document.parent) {
return <li key={index}><button onClick={() => toggleDocumentOverlay(document.dataUrl, document.label)} className={`${widget.label === widgetName ? 'active' : ''}`}>{document.label}</button></li>
}
})
}
</li>
);
}
推荐阅读
- jquery - click 被识别为双击 jquery
- android - 为什么会出现此错误,我该如何解决?
- ios - 如何检查用户电子邮件是否已验证?
- python - 当前 AWS 身份不是角色:arn:aws:iam::XXXXXXXXXXX:root,因此不能用作 SageMaker 执行角色
- java - Apache Iceberg 无法将数据写入表中
- r - 如何在 Ubuntu 18.04 上更新 R 使用的 libcurl 版本
- c# - c# Intersect 2 列表具有相同但不相同的对象
- javascript - Angular 7 中的 JWT 刷新令牌 - API 在 HTTP 拦截器中多次调用
- angular - Ag 网格不显示滚动条
- sql - 如何对重复的 SQL/PSQL 求和