reactjs - 如何在反应中使用地图进行递归
问题描述
我有 JSON 数据,我想读取所有数据并制作一个下拉列表。这是我编写的示例代码。在此代码中仅显示第 2 级。我想要所有级别。
{
menu_data.map((menu)=>(
menu.children ?
<div class="menu-item sub-nav">{menu.name}
<div class="menu-container">{menu.children.map((child)=>(<div class="menu-item"><a href={child.url}>{child.name}</a></div>))}</div>
</div>
:
<div class="menu-item">{menu.name}</div>
))
}
The JSON data looks like
[{
"name": "ABC",
"url": "/abc.html"
},
{
"name": "XYZ",
"children": [{
"name": "PQR",
"url": " /pqr.jsp"
},
{
"name": "MOB",
"url": "/hello"
},
{
"name": "TOC",
"children": [
{
"name": "LOL",
"url": "/hello"
},
{
"name": "RST",
"url": "/hello"
},
{
"name": "NULL",
"url": "/hello"
}
]
},
]
}
]
},
{
"name": "def",
"url": "/def.html"
}
]
请参阅此屏幕截图。就这样,我想表现出来。 在此处输入图像描述
任何人都有任何想法。
How to solve this problem.
解决方案
你menu_data
也有一个问题:
const menu_data = [
{
name: "ABC",
url: "/abc.html",
},
{
name: "XYZ",
children: [
{
name: "PQR",
url: "/pqr.jsp",
},
{
name: "MOB",
url: "/hello",
},
{
name: "TOC",
children: [
{
name: "LOL",
url: "/hello",
},
{
name: "RST",
url: "/hello",
},
{
name: "NULL",
url: "/hello",
},
],
},
],
},
{
name: "def",
url: "/def.html",
},
];
定义递归菜单渲染器,如下所示:
const renderMenu = (menu) => {
return menu.map((item) => (
<>
{item.children ? (
<div className="menu-item sub-nav">
{item.name}
<div className="menu-container">
{renderMenu(item.children)}
</div>
</div>
) : (
<div className="menu-item">
<a href={item.url}>{item.name}</a>
</div>
)}
</>
));
};
如下所示:
return <div className="menu-container">{renderMenu(menu_data)}</div>;
此处的工作示例:https ://codesandbox.io/s/confident-cloud-hw5pl?file=/src/App.js
推荐阅读
- doctrine - Doctrine\Common\Annotations\DocLexer::T_CLOSE_PARENTHESIS,得到“日期时间”
- c - if-else 块中的“if (0)”块的目的是什么?
- c# - Xamarin Forms,每次击键后在 Entry 上关闭键盘
- javascript - 如何用javascript中的值替换句子中的单词?
- java - 使用 POI java 从用户(控制台)写入 excel 数据
- mongodb - 为什么将数据从 API 保存到 CSV 比将数据上传到 MongoDB 数据库更快
- python - 需要一个 to_csv 数组修复 python
- python-3.x - AttributeError:“numpy.ndarray”对象没有属性“as_matrix”
- java - 如果 String 是不可变的,如果 String 常量池只有一个特定值的副本,以下场景如何给出两个不同的输出
- hadoop - 使用 sqoop 将数据从 Oracle 导入 HDFS 时如何保留数据类型?