[解決済み] React.jsで、マッピングするオブジェクトの配列なしで、要素をループしてレンダリングするにはどうすればよいですか?
質問
jQueryコンポーネントをReact.jsに変換しようとしているのですが、困っていることの1つは、forループに基づいてn個の要素をレンダリングすることです。
これは不可能であり、推奨もされないと理解していますし、モデル内に配列が存在する場合は
map
. それはいいとして、配列がない場合はどうでしょうか。 代わりに、レンダリングする要素の数に相当する数値がある場合は、どうすればよいのでしょうか?
ここでは、ある要素の前に、その階層レベルに応じて任意の数のspanタグをつけたい場合を例に挙げています。 つまり、レベル3では、text要素の前にspanタグを3つ付けたいのです。
javascriptで
for (var i = 0; i < level; i++) {
$el.append('<span class="indent"></span>');
}
$el.append('Some text value');
これと似たようなことをJSXのReact.jsコンポーネントで動作させることはできないようです。 代わりに以下のように、まず正しい長さのtemp配列を構築して、その配列をループさせる必要がありました。
React.js
render: function() {
var tmp = [];
for (var i = 0; i < this.props.level; i++) {
tmp.push(i);
}
var indents = tmp.map(function (i) {
return (
<span className='indent'></span>
);
});
return (
...
{indents}
"Some text value"
...
);
}
きっと、これが一番、いや、唯一の方法ではないのでしょうか? 私は何を見逃しているのでしょうか?
解決方法は?
更新しました。React > 0.16現在
Renderメソッドは必ずしも1つの要素を返す必要はありません。配列を返すこともできます。
var indents = [];
for (var i = 0; i < this.props.level; i++) {
indents.push(<span className='indent' key={i}></span>);
}
return indents;
または
return this.props.level.map((item, index) => (
<span className="indent" key={index}>
{index}
</span>
));
OLD:
代わりに1つのループを使用することができます
var indents = [];
for (var i = 0; i < this.props.level; i++) {
indents.push(<span className='indent' key={i}></span>);
}
return (
<div>
{indents}
"Some text value"
</div>
);
を使用することもできます。 .マップ と派手なes6
return (
<div>
{this.props.level.map((item, index) => (
<span className='indent' key={index} />
))}
"Some text value"
</div>
);
また、戻り値をコンテナで包む必要があります。上の例ではdivを使いました
ドキュメントにあるように ここで
<ブロッククオート現在、コンポーネントのレンダーでは、1 つのノードしか返すことができません。たとえば、返すべき div のリストがある場合は、コンポーネントを div、span、またはその他のコンポーネントでラップする必要があります。
関連
-
WeChatアプレット用ユニアプリによるグローバルシェアリング
-
元のイベントが実行されなかった後に要素を追加するためのjQueryソリューション
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み] オブジェクトをメンバーとして、プレーンなJavaScriptオブジェクトをループさせる方法
-
[解決済み] 新しい配列を作成せずに、既存のJavaScript配列を別の配列で拡張する方法
-
[解決済み] 配列から最初のN個の要素を取得する方法
-
[解決済み] JavaScript の連想配列からオブジェクトを削除するにはどうすればよいですか?
-
[解決済み] forループを壊さずに配列をループして項目を削除する
-
[解決済み] React - 制御不能な入力を変更する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
親子コンポーネント通信を解決する3つのVueスロット
-
要素ツリー制御によるvueTreeテーブル
-
vue for 登録ページ効果 vue for sms 認証コードログイン
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
[解決済み】React - TypeError: 未定義のプロパティ 'props' を読み取ることができない。
-
[解決済み】TypeScript-のAngular Frameworkエラー - "exportAsがngFormに設定されたディレクティブはありません"
-
[解決済み】React Uncaught Error: 対象コンテナが DOM 要素でない [重複]。
-
[解決済み】<select>で現在選択されている<option>をJavaScriptで取得するにはどうすればよいですか?