Wie man ein Element n-mal mit JSX und Lodash wiederholt
Lesezeit: 3 Minuten
Immer noch tot
Ich verwende React/JSX und Lodash in meiner App, um das zu erreichen, was ich will.
Ich muss ein Element abhängig von einer Bedingung eine bestimmte Anzahl von Malen wiederholen. Wie soll ich das machen?
Hier ist das Element:
<span className="busterCards">♦</span>;
Und ich ordne es so zu:
let card;
if (data.hand === '8 or more cards') {
card = <span className="busterCards">♦</span>;
}
In diesem Fall muss ich also das Element wiederholen 8 mal. Wie sollte der Prozess mit Lodash aussehen?
Wie wäre es mit new Array(8).join('<span className="busterCards">♦</span>');?
– RAM
9. Dezember 2015 um 21:39 Uhr
Die von @Vohuman vorgeschlagene Lösung ist ein sehr sauberer Weg, um die Arbeit zu erledigen. Innerhalb der ist keine vergleichbare Funktion definiert Lodash-Dokumente.
– dbeg
9. Dezember 2015 um 21:42 Uhr
@Vohuman würde einen String generieren, während OP DOM mit JSX-Syntax erstellen möchte.
– Pawel
9. Dezember 2015 um 21:45 Uhr
@Vohuman es ist komisch, aber ich bekomme die ganze Zeichenfolge gerendert
– Immer noch tot
9. Dezember 2015 um 21:47 Uhr
@pawel du hast recht, weißt du wie ich das machen kann?
– Immer noch tot
9. Dezember 2015 um 21:48 Uhr
Der kürzeste Weg dazu ohne externe Bibliotheken:
const n = 8; // Or something else
[...Array(n)].map((e, i) => <span className="busterCards" key={i}>♦</span>)
Tolle Antwort für Nicht-Lodash-Benutzer! Es sei darauf hingewiesen, dass ES6-Funktionen erforderlich sind (obwohl ich denke, dass dies durch die Verwendung von let sowieso in der Frage).
– Pseudoramble
14. Oktober 2016 um 2:09 Uhr
Für diejenigen, die Typescript 2+ verwenden, wird dies kompiliert Array(3).slice().map(...) was nicht das gleiche Ergebnis erzielt. Siehe die Antwort von @ Jian unten als Ersatz.
– Pierre vDEV
29. Januar 2018 um 14:23 Uhr
Schön, siehe meine Antwort, die mehr ausführt
– vsync
16. Juli 2018 um 11:15 Uhr
Warum kann das nicht einfach sein Array(n).map((e, i) => <span className="busterCards" key={i}>♦</span>)
– Kevin Wang
4. Juni 2019 um 21:30 Uhr
@KevinWang, weil Ihr Vorschlag eine erstellen wird leer Array mit einer Länge von 8, anstatt ein Array, das aus 8 undefinierten Elementen besteht. Iteration funktioniert bei ersterem nicht. Stecken Sie es in die Konsole, um den Unterschied zu sehen.
Dies scheint sauberer zu sein, aber mit mehr Iterationen als etwa 126000 erhalte ich “Maximale Aufruflistengröße überschritten” (zumindest in Chrome Web Desktop).
– jave.web
26. Februar 2022 um 22:56 Uhr
Ich bin auf einen Kollegen gestoßen, der diesen Code verwendet, und die Verwendung von Array.apply, um eine bestimmte Anzahl von Wiederholungen zu wiederholen, war für mich auf den ersten Blick nicht intuitiv. Ich persönlich würde zuerst andere intuitivere Lösungen in Betracht ziehen, wenn zukünftige Entwickler Ihren Code lesen werden.
– Logan Cundiff
11. April 2022 um 17:02 Uhr
Es tut mir leid, davon zu hören. Die Lösung zielt darauf ab, so wenig Abhängigkeiten wie möglich zu verwenden. Ich würde Ihrem Kollegen vorschlagen, die Lesbarkeit zu verbessern, indem er es zu einer wiederverwendbaren Funktion mit einem vernünftigen Namen wie macht times.
var numberOfCards = 8; // or more.
if (data.hand >= numberOfCards) {
var cards = [];
for (var i = 0; i < numberOfCards; i++) {
cards[i] = (<span className="busterCards">♦</span>);
}
}
PriyankMotivaras
Ich benutze das und funktioniert für mich.
[...Array(10)].map((elementInArray, index) => (
<div key={index}>
Text in Loop
</div>
))
14390700cookie-checkWie man ein Element n-mal mit JSX und Lodash wiederholtyes
Wie wäre es mit
new Array(8).join('<span className="busterCards">♦</span>');
?– RAM
9. Dezember 2015 um 21:39 Uhr
Die von @Vohuman vorgeschlagene Lösung ist ein sehr sauberer Weg, um die Arbeit zu erledigen. Innerhalb der ist keine vergleichbare Funktion definiert Lodash-Dokumente.
– dbeg
9. Dezember 2015 um 21:42 Uhr
@Vohuman würde einen String generieren, während OP DOM mit JSX-Syntax erstellen möchte.
– Pawel
9. Dezember 2015 um 21:45 Uhr
@Vohuman es ist komisch, aber ich bekomme die ganze Zeichenfolge gerendert
– Immer noch tot
9. Dezember 2015 um 21:47 Uhr
@pawel du hast recht, weißt du wie ich das machen kann?
– Immer noch tot
9. Dezember 2015 um 21:48 Uhr