J'ai un tableau d'objets. Je voudrais cartographier ce tableau d'objets. Je sais comment mapper un tableau, mais je ne sais pas comment mapper un tableau d'objets. Voici ce que j'ai fait jusqu'à présent:
Le tableau d'objets que je veux mapper:
const theData = [
{
name: 'Sam',
email: '[email protected]'
},
{
name: 'Ash',
email: '[email protected]'
}
]
Mon composant:
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
}
Qu'est-ce que je rate ?
Ce dont vous avez besoin est de mapper votre tableau d'objets et de vous rappeler que chaque élément sera un objet, de sorte que vous utiliserez par exemple la notation pointée pour prendre les valeurs de l'objet.
Dans votre composant
[
{
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>
);
})
Et rappelez-vous que lorsque vous mettez un tableau de jsx, il a une signification différente et vous ne pouvez pas simplement mettre un objet dans votre méthode de rendu car vous pouvez placer un tableau.
Regardez ma réponse à mapper un tableau sur jsx
Je pense que vous voulez imprimer le nom de la personne ou les deux le nom et l'email:
const renObjData = this.props.data.map(function(data, idx) {
return <p key={idx}>{data.name}</p>;
});
ou :
const renObjData = this.props.data.map(function(data, idx) {
return ([
<p key={idx}>{data.name}</p>,
<p key={idx}>{data.email}</p>,
]);
});
@FurkanO a fourni la bonne approche. Bien que pour adopter une approche plus propre (moyen 6), vous pouvez faire quelque chose comme ceci
[{
name: 'Sam',
email: '[email protected]'
},
{
name: 'Ash',
email: '[email protected]'
}
].map( ( {name, email} ) => {
return <p key={email}>{name} - {email}</p>
})
À votre santé!
essayez l'extrait suivant
const renObjData = this.props.data.map(function(data, idx) {
return <ul key={idx}>{$.map(data,(val,ind) => {
return (<li>{val}</li>);
}
}</ul>;
});