use*_*460 12 arrays components dictionary object reactjs
我有一个对象数组.我想映射这个对象数组.我知道如何映射数组,但无法弄清楚如何映射对象数组.这是我到目前为止所做的:
我要映射的对象数组:
const theData = [
{
name: 'Sam',
email: 'somewhere@gmail.com'
},
{
name: 'Ash',
email: 'something@gmail.com'
}
]
Run Code Online (Sandbox Code Playgroud)
我的组件:
class ContactData extends Component {
render() {
//works for array
const renData = this.props.dataA.map((data, idx) => {
return <p key={idx}>{data}</p>
});
//doesn't work for array of objects
const renObjData = this.props.data.map(function(data, idx) {
return <p key={idx}>{data}</p>
});
return (
<div>
//works
{rennData}
<p>object</p>
//doesn't work
{renObjData}
</div>
)
}
}
ContactData.PropTypes = {
data: PropTypes.arrayOf(
PropTypes.obj
),
dataA: PropTypes.array
}
ContactData.defaultProps = {
data: theData,
dataA: dataArray
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
Fur*_*anO 21
你需要的是映射你的对象数组并记住每个项目都是一个对象,这样你就可以使用例如点符号来获取对象的值.
在您的组件中
[
{
name: 'Sam',
email: 'somewhere@gmail.com'
},
{
name: 'Ash',
email: 'something@gmail.com'
}
].map((anObjectMapped, index) => {
return (
<p key={`${anObjectMapped.name}_{anObjectMapped.email}`}>
{anObjectMapped.name} - {anObjectMapped.email}
</p>
);
})
Run Code Online (Sandbox Code Playgroud)
并且记住,当你放置一个jsx数组时,它有不同的含义,你不能只在你的渲染方法中放置对象,因为你可以放一个数组.
看看我将数组映射到jsx的答案
我认为您想打印此人的姓名或同时打印姓名和电子邮件:
const renObjData = this.props.data.map(function(data, idx) {
return <p key={idx}>{data.name}</p>;
});
Run Code Online (Sandbox Code Playgroud)
或者 :
const renObjData = this.props.data.map(function(data, idx) {
return ([
<p key={idx}>{data.name}</p>,
<p key={idx}>{data.email}</p>,
]);
});
Run Code Online (Sandbox Code Playgroud)
@FurkanO 提供了正确的方法。尽管要采用更清洁的方法(es6 方式),您可以执行以下操作
[{
name: 'Sam',
email: 'somewhere@gmail.com'
},
{
name: 'Ash',
email: 'something@gmail.com'
}
].map( ( {name, email} ) => {
return <p key={email}>{name} - {email}</p>
})
Run Code Online (Sandbox Code Playgroud)
干杯!