オブジェクトの配列があります。このオブジェクトの配列をマップしたいと思います。配列をマッピングする方法は知っていますが、オブジェクトの配列をマッピングする方法がわかりません。これは私がこれまでにやったことです:
マップしたいオブジェクトの配列:
const theData = [
{
name: 'Sam',
email: '[email protected]'
},
{
name: 'Ash',
email: '[email protected]'
}
]
私のコンポーネント:
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
}
私は何が欠けていますか?
必要なのは、オブジェクトの配列をマップし、すべてのアイテムがオブジェクトになることを覚えておいて、たとえばドット表記を使用してオブジェクトの値を取得することです。
コンポーネント内
[
{
name: 'Sam',
email: '[email protected]'
},
{
name: 'Ash',
email: '[email protected]'
}
].map((anObjectMapped, index) => {
return (
<p key={`${anObjectMapped.name}_{anObjectMapped.email}`}>
{anObjectMapped.name} - {anObjectMapped.email}
</p>
);
})
また、jsxの配列を配置すると、意味が異なり、配列を配置できるので、単にrenderメソッドにオブジェクトを配置することはできません。
配列をjsxにマッピングする で私の答えを見てください
私はあなたが人の名前または名前と電子メールの両方を印刷したいと思う:
const renObjData = this.props.data.map(function(data, idx) {
return <p key={idx}>{data.name}</p>;
});
または :
const renObjData = this.props.data.map(function(data, idx) {
return ([
<p key={idx}>{data.name}</p>,
<p key={idx}>{data.email}</p>,
]);
});
@FurkanOは適切なアプローチを提供しています。よりクリーンなアプローチ(es6の方法)に行く場合でも、次のようなことができます
[{
name: 'Sam',
email: '[email protected]'
},
{
name: 'Ash',
email: '[email protected]'
}
].map( ( {name, email} ) => {
return <p key={email}>{name} - {email}</p>
})
乾杯!
次のスニペットを試してください
const renObjData = this.props.data.map(function(data, idx) {
return <ul key={idx}>{$.map(data,(val,ind) => {
return (<li>{val}</li>);
}
}</ul>;
});