javascript - 从 ReactJS 中的对象列表渲染 JSON 子列表
问题描述
我有这样的 JSON 数据。我想渲染子对象标题。但它说“index.js:1 警告:列表中的每个孩子都应该有一个唯一的“关键”道具。”
[
{
"title": "Components",
"children": [
{
"title": "Buttons",
"url": "url"
}
]
},
{
"title": "Components",
"children": [
{
"title": "Buttons",
"url": "url"
}
]
}
]
如何获得儿童头衔?{data.children.title} 不起作用。
const items = data.map(data => {
return(
<div>
<ul>
<li>
<span>{data.title}</span>
<span>{data.children.title}</span>
</li>
</ul>
</div>
)
});
return items;
解决方案
假设您的children
子数组始终至少有一个项目,那么您可以通过以下方式呈现title
当前data
对象的第一个子项目:
data.children[0].title
在您的渲染代码中,它看起来像这样:
const items = data.map((data, idx) => (
<div key={idx}>
<ul>
<li>
<span>{data.title}</span>
<span>{data.children[0].title}</span>
</li>
</ul>
</div>));
return items;
对于更强大的替代方案,您可以在渲染之前通过在渲染逻辑children
中添加链接调用来检查子数组中是否存在项目:filter()
const items = data
/* If children sub-array is non-empty, then it is included
for rendering */
.filter(data => data.children.length > 0)
/* Map any data items that pass filtering */
.map((data, idx) => (
<div key={idx}>
<ul>
<li>
<span>{data.title}</span>
<span>{data.children[0].title}</span>
</li>
</ul>
</div>));
return items;
另请注意,我已经在渲染列表时根据需要在每个映射的每个映射上包含了key
道具,这应该可以解决您在控制台中看到的警告。希望有帮助!div
更新
要将每个data
对象的所有子对象呈现为内部的子列表,ul
您可以通过以下元素的内部映射data.children
来实现:<li>
const items = data
.filter(data => data.children.length > 0)
.map((data, idx) => (
<div key={idx}>
{/*
I'm assuming data.title should exist outside of
children list
*/}
<span>{data.title}</span>
<ul>
{ data
.children
.map((child, jdx) => (
<li key={jdx}>
<span>{child.title}</span>
</li>))
}
</ul>
</div>));
推荐阅读
- python - 403 Forbidden request with PHP Post request在Python中工作
- reactjs - React Searchbar历史推送到另一个页面但带有一个组件
- apache-kafka - Dataproc 中的 Presto:配置 Kafka 目录
- python - 使用 mypy 在 TypeGuard 函数中使用泛型类型
- r - 访问 Twitter 流 API - 身份验证在 R 中不起作用
- r - 将行中的字符序列转换为R中的单独行
- c# - 将 HTTP 更改为 HTTPS 在 Asp.net 网页中出现“重定向过多”错误
- node.js - 如何从节点js中的mysql2/promise获取mysql命令
- spring - 在表单实现期间,Bean 名称“用户”的 BindingResult 和普通目标对象都不能用作请求属性
- java - 方法有返回值时,invokestatic是否将返回值放入栈中?