2015-12-09 11 views
9

Sto usando React/JSX nella mia app per realizzare ciò che voglio, anche, Lodash.Come ripetere un elemento n volte usando JSX

Ho bisogno di ripetere un elemento un certo numero di volte a seconda di una condizione, come dovrei farlo?

Ecco l'elemento:

<span className="busterCards">♦</span>;

E Sto assegnando così:

let card; 
    if (data.hand === '8 or more cards') { 
     card = <span className="busterCards">♦</span>; 
    } 

Quindi, in questo caso, ho bisogno di ripetere l'elemento 8 volte. Quale dovrebbe essere il processo usando Lodash?

+1

come circa 'nuovo Ar ray (8) .join (''); '? – undefined

+0

La soluzione suggerita da @Vohuman è un modo molto pulito per portare a termine il lavoro. Non esiste una funzione analoga definita all'interno dei [documenti di lodash] (https://lodash.com/docs). –

+1

@Vohuman genererebbe una stringa, mentre OP vuole creare DOM usando la sintassi JSX. – pawel

risposta

5

Qui si va:

let card = []; 
_.times(8,() => { 
    card.push(<span className="busterCards">♦</span>); 
}); 

si consiglia di aggiungere la chiave per ogni elemento in modo span Reagire non si lamentano di perdere l'attributo chiave:

let card = []; 
_.times(8, (i) => { 
    card.push(<span className="busterCards" key={i}>♦</span>); 
}); 

Per maggiori informazioni sulla .times, fare riferimento qui: https://lodash.com/docs#times

+0

Sto provando ad assegnarlo a 'let card', ma non sta ripetendo l'elemento – StillDead

+0

@StillDead Ho aggiornato la risposta. Dare un'occhiata! –

1

utilizzando _.times: https://jsfiddle.net/v1baqwxv/

var Cards = React.createClass({ 
    render() { 
     return <div>cards { 
      _.times(this.props.count,() => <span>♦</span>) 
     }</div>; 
    } 
}); 
1

Si potrebbe fare in questo modo (senza lodash):

var numberOfCards = 8; // or more. 

if (data.hand >= numberOfCards) { 
    var cards = []; 

    for (var i = 0; i < numberOfCards; i++) { 
     cards[i] = (<span className="busterCards">♦</span>); 
    } 
} 
29

La via più breve per fare questo senza librerie esterne:

const n = 8; // Or something else 

[...Array(n)].map((e, i) => <span className="busterCards" key={i}>♦</span>) 
+3

Risposta stupenda per utenti non-lodash! Vale la pena sottolineare che richiede funzionalità ES6 (anche se penso che sia implicito usando 'let' nella domanda comunque). –

+0

Per quelli che usano Typescript 2+, questo verrà compilato in 'Array (3) .slice(). Map (...)' che non raggiunge lo stesso risultato. Vedi la risposta di @ Jian sotto come una sostituzione. –

1

soluzione senza lodash o ES6 diffusione sintassi:

Array.apply(null, { length: 10 }).map((e, i) => (
    <span className="busterCards" key={i}> 
    ♦ 
    </span> 
)); 
Problemi correlati