recherche

Maison  >  Questions et réponses  >  le corps du texte

Afficher la liste des objets avec des propriétés dans JSX

<p>J'ai le code suivant dans mon composant React : </p> <pre class="brush:php;toolbar:false;"><div className="mainApp"> <div className="pkgsList"> {pkgData.map((p) => <h3 key={p.name}>{p.name}</h3> )} </div> </div> )</pré> <p>Dans ce cas, <code>pkgData</code> est un tableau d'objets qui tente de décrire le package dans ce scénario. Chaque objet contient une propriété de chaîne <code>name</code> et une propriété de tableau <code>sources</code>, où chaque élément est également un objet. Je souhaite imprimer les éléments dans <code>sources</code> sous l'élément <code>h3</code> (chaque élément a plusieurs propriétés), mais je n'arrive pas à comprendre comment en ajouter davantage. le HTML/JSX multiple ci-dessus - toute aide serait grandement appréciée. </p> <p>J'ai essayé d'appeler la carte pour chaque p, mais que je l'enveloppe dans <code>()</code> ou simplement <code>{}</code> J'obtiens une erreur</p> <pre class="brush:php;toolbar:false;">{p.map((s) => { })</pré> <p>Le code div généré sera donc : </p> <pre class="brush:php;toolbar:false;"><div className="pkgList"> {pkgData.map((p) => <h3 key={p.name}>{p.name}</h3> {p.map((c) => { }) )} </div></pre> <p>Mon application React n'est pas autorisée à se compiler correctement. </p>
P粉486743671P粉486743671437 Il y a quelques jours492

répondre à tous(2)je répondrai

  • P粉903052556

    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>

    répondre
    0
  • P粉287254588

    P粉2872545882023-09-03 15:36:54

    Erreur de carte

    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) => {
        ...
        }
      )}

    Erreur JSX

    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

    répondre
    0
  • Annulerrépondre