Rendering durch Komma getrennte Liste von links
Ich versuche, die Ausgabe einer Liste von durch Kommata getrennt links und dies ist meine Lösung.
var Item = React.createComponent({
render: function() {
var tags = [],
tag;
for (var i = 0, l = item.tags.length; i < l; i++) {
if (i === item.tags.length - 1) {
tag = <span><Tag key={i} tag={item.tags[i]} /></span>;
} else {
tag = <span><Tag key={i} tag={item.tags[i]} /><span>, </span></span>;
}
tags.push(tag);
}
return (
<tr>
<td>
{item.name}
</td>
<td>
{tags}
</td>
</tr>
);
}
});
Ich wurde gerade gefragt ob es eine schönere und saubere Art und Weise, dies zu erreichen?
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Auf dem Khan Academy nutzen wir einen Helfer mit Namen
intersperse
für diese:das Ihnen erlaubt, code zu schreiben, wie:
<span/>
) als zweiten parameter? Es funktioniert, aber ich bekomme eine Warnung über nicht die Angabe eines key... ich habe versucht, durch die Verpackung des<span>
in einer Funktion (und generiert einen zufälligen Schlüssel), aber das scheint nicht ganz richtig oder zu arbeiten.Einfach
In Reagieren 16 es geht auch einfacher:
{!!i && ", "}
!!i
nur konvertierti
zu boolean. Auch!!i
kann ersetzt werden durchi > 0
.o
und!!0
zurückfalse
. Ich denke auch, dies sollte eine zusätzliche Komma nach dem letzten element.!!i &&
es macht<span>, 0</span><span>, 1</span> ...
.{tags.map((tag, i) => <React.Fragment key={i}> <Tag tag={tag} /> {!!i && ", "} </React.Fragment>)}
Oder schreiben Sie einfach die Liste Elemente, um eine ungeordnete Liste und CSS verwenden.
Und CSS:
.csv
Klasse und machen es funktioniert mit jedem element:.csv>*
, nicht nurui>li
und es ist völlig verständlichHier ist eine Lösung, die es ermöglicht
<span>
s und<br>
s und junk als Trennzeichen:Filtert es falsey array-Elemente zu. Ich habe diese für die Formatierung von Adressen, wobei einige-Adresse Felder sind nicht ausgefüllt.
Er verwendet Fragmente zu vermeiden, die Warnungen über fehlende keys.
Die Lösung ohne zusätzliche tags
reduce
ist ein overkill hier und die optimale Funktion zu verwenden ist (technisch)flatMap (oder
chain
im Ramda). Leider ist JS nicht eine (noch) nicht.erzeugt so etwas wie
Funktion • Funktion Typ • Higher-order-Funktion • Partielle Anwendung
P. S.
für Ramda es
R.addIndex(R.chain)
stattflatMap
oben.Einfach:
Einfachste Weg, dies zu tun