[英]How to map a nested object
我必须用存储为 JSON 对象的数据填充 li 元素。 有了“标题”,它的工作很简单。 但这不是谈论名称的价值时。 如何映射 subMenu 对象以获取名称?
<ul>
{data.map(({ title, subMenu }) => (
<li className="mobileMenu-body-nav-item">
<button className="mobileMenu-body-nav-item-btn">
*** here I have to put name ***
</button>
</li>
))}
</ul>
JSON 对象
[
{
"title": "Breeds",
"subMenu": [
{
"id": 1,
"name": "Dog Breeds"
},
{
"id": 2,
"name": "Cat Breeds"
}
]
},
{
"title": "About Pet Adoption",
"subMenu": [
{
"id": 3,
"name": "About Dog Adoption"
},
{
"id": 4,
"name": "About Cat Adoption"
}
]
}
]
您可以再次调用map
,如下所示:
<ul>
{data.map(({ title, subMenu }) => (
<li className="mobileMenu-body-nav-item">
<button className="mobileMenu-body-nav-item-btn">
{subMenu.map(({ name }) => (<span>{name}</span>))}
</button>
</li>
))}
</ul>
更改<span>
标签以匹配您希望呈现的内容。
另外,如果这是 React,请不要忘记在使用map
时适当地设置key
属性:
<ul>
{data.map(({ title, subMenu }) => (
<li key={title} className="mobileMenu-body-nav-item">
<button className="mobileMenu-body-nav-item-btn">
{subMenu.map(({ name }) => (<div key={name}>{name}</div>))}
</button>
</li>
))}
</ul>
正如对已接受答案的评论中所指出的, div
元素不是buttons
有效子元素( 相关问题),虽然应该使用迭代数组的索引为 React 中的映射元素分配一个key
并不总是理想的。 (请参阅 TJCrowder 评论中的文档或相关文章)。
鉴于您正在映射嵌套列表,因此将其结构化似乎更合适。 这里使用title
作为外部li
键(尽管更明确的唯一属性会更好)和subMenu.id
作为内部li
的键。
<ul>
{data.map(({ title, subMenu }) => (
<li key={title} className='mobileMenu-body-nav-item'>
<ul>
{subMenu.map(({ id, name }) => (
<li key={id}>
<button className='mobileMenu-body-nav-item-btn'>{name}</button>
</li>
))}
</ul>
</li>
))}
</ul>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.