suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Liste der Objekte mit Eigenschaften in JSX anzeigen

<p>Ich habe den folgenden Code in meiner React-Komponente: </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> )</pre> <p>In diesem Fall ist <code>pkgData</code> ein Array von Objekten, das versucht, das Paket in diesem Szenario zu beschreiben. Jedes Objekt enthält eine String-Eigenschaft <code>name</code> und eine Array-Eigenschaft <code>sources</code>, wobei jedes Element auch ein Objekt ist. Ich möchte die Elemente in <code>sources</code> unter dem Element <code>h3</code> drucken (jedes Element hat mehrere Eigenschaften), aber ich weiß anscheinend nicht, wie ich weitere hinzufügen kann das oben genannte Multiple HTML/JSX – jede Hilfe wäre sehr dankbar. </p> <p>Ich habe versucht, die Karte für jedes p aufzurufen, aber ob ich sie beispielsweise in <code>()</code> oder nur <code>{}</code> Ich erhalte die Fehlermeldung</p> <pre class="brush:php;toolbar:false;">{p.map((s) => { })</pre> <p>Der generierte Div-Code lautet also: </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>Meine React-App kann nicht erfolgreich kompiliert werden. </p>
P粉486743671P粉486743671456 Tage vor504

Antworte allen(2)Ich werde antworten

  • P粉903052556

    P粉9030525562023-09-03 16:50:30

    像普通组件一样,您只能在映射中返回 1 个 jsx 元素。如果你想在地图函数中渲染多个元素,你可以将代码包装在一个反应​​片段中,如下所示:

    <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>

    Antwort
    0
  • P粉287254588

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

    地图错误

    首先,您在 pkgData.map 内的嵌套地图是错误的。 因为 p 本身不是数组。 地图应该是这样的,

    {p.sources.map((c) => {
        ...
        }
      )}

    JSX 错误

    第二,正如 @David 在评论中所说,由于 JSX 在底层的工作方式,你不能有多个顶级元素。 例如代码

    <div className="mainApp">
      <div className="pkgsList">
        {pkgData.map((p) => 
          <h3 key={p.name}>{p.name}</h3>                    
        )}
      </div>
    </div>

    相当于这个

    <div className="mainApp">
      <div className="pkgsList">
        {pkgData.map((p) => {
          return React.createElement("h3", {key: p.name}, p.name)
          }                    
        )}
      </div>
    </div>

    因此,如果您在顶层返回多个 JSX 元素,React.createElement 将无法工作。 因此,您应该使用一些标签(如fragments(<>)、div 等)将内容包装在顶层。

    例如,

    <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>

    仅供参考:https://react.dev/reference /react/createElement#creating-an-element-without-jsx

    Antwort
    0
  • StornierenAntwort