[解決済み] React JSX内のループ
2022-03-18 18:14:43
質問
React JSXで以下のようなことをやろうとしています(ObjectRowは別コンポーネントです)。
<tbody>
for (var i=0; i < numrows; i++) {
<ObjectRow/>
}
</tbody>
JSXは関数呼び出しにマッピングされるため、これが有効なJSXでないことは理解しています。しかし、テンプレートの世界から来て、JSXの初心者である私は、上記(コンポーネントを複数回追加する)をどのように達成するのかわかりません。
解決方法は?
JavaScriptの関数を呼び出しているだけだと考えてください。このとき
for
ループの中に、関数呼び出しの引数が入ることになります。
return tbody(
for (var i = 0; i < numrows; i++) {
ObjectRow()
}
)
関数を参照してください。
tbody
が渡されます。
for
ループを引数にとると、シンタックスエラーが発生します。
しかし、配列を作り、それを引数として渡すことは可能です。
var rows = [];
for (var i = 0; i < numrows; i++) {
rows.push(ObjectRow());
}
return tbody(rows);
JSXを扱う場合も、基本的には同じ構造で大丈夫です。
var rows = [];
for (var i = 0; i < numrows; i++) {
// note: we are adding a key prop here to allow react to uniquely identify each
// element in this array. see: https://reactjs.org/docs/lists-and-keys.html
rows.push(<ObjectRow key={i} />);
}
return <tbody>{rows}</tbody>;
ちなみに、私のJavaScriptの例は、そのJSXの例がほぼそのまま変換されたものである。で遊んでみてください。 バベルREPL を使えば、JSXがどのように動くかを知ることができます。
関連
-
[解決済み] TypeError: $.ajax(...) is not a function?
-
[解決済み】 env: node: macにそのようなファイルやディレクトリはありません
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] ループ内のJavaScriptクロージャ - シンプルな実用例
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] コールバック内で正しい `this` にアクセスする方法
-
[解決済み] Reactのこの3つの点は何をするところなのでしょうか?
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] React JSX: selecting "selected" on selected <select> option
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
Vueのクラススタイルの使い方の詳細
-
Vueでルートネスティングを実装する例
-
vueのプロジェクトでモックを使用する方法を知っていますか?
-
Vueの「データを聴く」原則を解説
-
[解決済み】最大呼び出しスタックサイズ超過エラー
-
[解決済み】SyntaxError: JSONの位置1に予期しないトークンoがある。
-
[解決済み】gulp anythingを実行するたびに、アサーションエラーが発生します。- タスク関数を指定する必要があります
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
フロントエンド null のプロパティ 'disabled' を読み取れない 問題が解決された