JSX のプロパティを持つオブジェクトのリストを表示する
P粉486743671
2023-09-02 21:38:43
<p>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>
)</pre>
<p>この場合、<code>pkgData</code> は、このシナリオでパッケージを記述しようとするオブジェクトの配列です。各オブジェクトには文字列プロパティ <code>name</code> と配列プロパティ <code>sources</code> が含まれており、各項目もオブジェクトです。 <code>sources</code> 内の項目を <code>h3</code> 要素の下に出力したいのですが (各項目には複数のプロパティがあります)、さらに追加する方法がわかりません。上記の複数の HTML/JSX - 助けていただければ幸いです。 </p>
<p>各 p のマップを呼び出そうとしていますが、それを <code>()</code> でラップするか、単に <code>{}</code> でラップするかにかかわらず、たとえば、エラー</p>が発生します
<pre class="brush:php;toolbar:false;">{p.map((s) => {
})</pre>
<p>したがって、生成される div コードは次のようになります: </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>React アプリは正常にコンパイルできません。 </p>
通常のコンポーネントと同様、マップ内で返すことができる jsx 要素は 1 つだけです。 Map 関数で複数の要素をレンダリングする場合は、次のように反応スニペットでコードをラップできます:
リーリー地図エラー
まず第一に、
リーリーpkgData.map
内のネストされたマップが間違っています。p
自体は配列ではないためです。 マップは次のようになります。JSXエラー
第二に、@David がコメントで述べたように、JSX が内部で動作する仕組みのため、複数のトップレベル要素を持つことはできません。 たとえばコード
リーリーはこの
と同等です リーリーしたがって、最上位で複数の JSX 要素を返す場合、React.createElement は機能しません。 したがって、fragment()、div などのタグを使用して、最上位でコンテンツをラップする必要があります。
###例えば、### リーリー参考専用:
https://react.dev/reference /react/createElement#creating-an-element-without-jsx