Kā React.js izveidot cilpu un atveidot elementus bez objektu masīva, ko kartēt?
Es'es mēģinu pārvērst jQuery komponents React.js un viena no lietām, es'man ir grūtības ar ir atveidot n skaitu elementu, pamatojoties uz for ciklu.
Es saprotu, ka tas nav iespējams vai nav ieteicams un ka, ja modelī ir masīvs, ir pilnīgi loģiski izmantot map
. Tas ir labi, bet ko darīt, ja jums nav masīva? Tā vietā jums ir skaitliska vērtība, kas ir vienāda ar noteiktu elementu skaitu, kas jāatveido, un ko tad jums vajadzētu darīt?
Lūk, mans piemērs, es gribu elementam pievienot prefiksu ar patvaļīgu span tagu skaitu, pamatojoties uz tā hierarhijas līmeni. Tātad 3. līmenī pirms teksta elementa es gribu 3 span tagus.
JavaScript:
for (var i = 0; i < level; i++) {
$el.append('<span class="indent"></span>');
}
$el.append('Some text value');
Man šķiet, ka es nevaru panākt, lai šis vai kāds līdzīgs JSX React.js komponents darbotos. Tā vietā man bija jādara šādi, vispirms izveidojot pagaidu masīvu līdz pareizajam garumam un pēc tam cilpu masīvā.
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"
...
);
}
Protams, tas nevar būt labākais vai vienīgais veids, kā to panākt? Ko es palaidu garām?
Atjaunināts: No React > 0.16
Render metodei nav obligāti jāatgriež viens elements. Var atdot arī masīvu.
VAI
Docs šeit skaidro par JSX bērniem
OLD:
Tā vietā var izmantot vienu cilpu
Varat arī izmantot .map un izdomātu es6
Turklāt atgrieztā vērtība ir jāietver konteinerā. Iepriekš minētajā piemērā es izmantoju div
Kā teikts dokumentos šeit.
Šeit ir funkcionālāks piemērs ar dažām ES6 funkcijām:
Es izmantoju
Object.keys(chars).map(...)
, lai veiktu cilpu renderēšanu