Maison > Questions et réponses > le corps du texte
P粉9030525562023-09-03 16:50:30
Comme les composants normaux, vous ne pouvez renvoyer qu'un seul élément jsx dans la carte. Si vous souhaitez afficher plusieurs éléments dans la fonction map, vous pouvez envelopper le code dans un extrait de réaction comme celui-ci :
<div className="mainApp"> <div className="pkgsList"> {pkgData.map((p) => ( <> {/* <- this is a fragment */} <h3 key={p.name}>{p.name}</h3> {p.sources.map((s) => ( <>{/* render source here */}</> ))} </> ))} </div> </div>
P粉2872545882023-09-03 15:36:54
Tout d'abord, votre carte imbriquée à l'intérieur pkgData.map
est fausse.
Parce que p
en soi n'est pas un tableau.
La carte devrait ressembler à ceci,
{p.sources.map((c) => { ... } )}
Deuxièmement, comme @David l'a dit dans les commentaires, vous ne pouvez pas avoir plusieurs éléments de haut niveau en raison de la façon dont JSX fonctionne sous le capot. Par exemple le code
<div className="mainApp"> <div className="pkgsList"> {pkgData.map((p) => <h3 key={p.name}>{p.name}</h3> )} </div> </div>
Équivalent à ceci
<div className="mainApp"> <div className="pkgsList"> {pkgData.map((p) => { return React.createElement("h3", {key: p.name}, p.name) } )} </div> </div>
Donc, si vous renvoyez plusieurs éléments JSX au niveau supérieur, React.createElement ne fonctionnera pas. Par conséquent, vous devez envelopper le contenu au niveau supérieur en utilisant certaines balises telles que fragments(<>), div, etc.
Par exemple,
<div className="mainApp"> <div className="pkgsList"> {pkgData.map((p) => <> <h3 key={p.name}>{p.name}</h3> {p.sources.map((c) => <p>{c.something}</p> )} </> )} </div> </div>
Pour référence uniquement : https://react.dev/reference /react/createElement#creating-an-element-without-jsx