const course = [{
id: 1,
name: 'Half Stack application development',
parts: [
{
name: 'Fundamentals of React',
exercises: 10,
id: 1
},
{
name: 'Using props to pass data',
exercises: 7,
id: 2
},
{
name: 'State of a component',
exercises: 14,
id: 3
}
]
},
{
name: 'Node.js',
id: 2,
parts: [
{
name: 'Routing',
exercises: 3,
id: 1
},
{
name: 'Middlewares',
exercises: 7,
id: 2
}
]
}
]我发现很容易映射名称"Half Development“和"Node.js”,并通过以下操作显示它们:
{course.map(c => <li>{c.name}</li>)}但是,course.parts.map(c => <li>{c.name}</li>)返回未定义的。
你怎么把它映射成这样
半栈应用程序开发
使用道具传递组件
Node.js
为什么course.parts.map(p => p.name)返回未定义的名称,以及如何访问部件数组中的名称?
发布于 2022-04-28 10:51:48
你需要在地图中画一张地图。
这应该是可行的:
<ul>
{course.map(c => (
<>
<li>{c.name}</li>
<ul>
{c.parts.map(p =>
<li>{p.name}</li>)}
</ul>
</>
))}
</ul>发布于 2022-04-28 10:58:14
下面是一个使用堆栈片段和ReactJS (v16.8.0)实现预期目标的工作演示。
const Thingy = ({courses, ...props}) => {
return (
<div>
{courses.map(c => ( // iterate over the "courses" array
<div>
<h4>{c.name}</h4>
{c.parts.map(p => ( // now, for each "course", iterate over "parts" array
<li>{p.name}</li>
))}
</div>
))}
</div>
);
};
const course = [{
id: 1,
name: 'Half Stack application development',
parts: [
{
name: 'Fundamentals of React',
exercises: 10,
id: 1
},
{
name: 'Using props to pass data',
exercises: 7,
id: 2
},
{
name: 'State of a component',
exercises: 14,
id: 3
}
]
},
{
name: 'Node.js',
id: 2,
parts: [
{
name: 'Routing',
exercises: 3,
id: 1
},
{
name: 'Middlewares',
exercises: 7,
id: 2
}
]
}
]
ReactDOM.render(
<div>
DEMO
<Thingy courses={course} />
</div>,
document.getElementById("rd")
);<div id="rd" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.0/umd/react-dom.production.min.js"></script>
解释
将内联注释添加到上面的片段中。
发布于 2022-04-28 10:43:37
course和parts都是数组,因此不能直接获得course.parts。您可以为渲染进行双重映射,如下所示
{course.map(c => <>
<p>{c.name}</p>
<ul>
{c.parts.map(part => <li>{part.name}</li>)}
</ul>
</>)}https://stackoverflow.com/questions/72042207
复制相似问题