JSX

2015-12-09 22 views
9

kullanarak bir öğeyi n kez yinelemiyorum Ne de, Lodash, istediğim gerçekleştirmek için benim app React/JSX kullanıyorum.JSX

Bir öğeye, bir koşula bağlı olarak belirli bir süre tekrar etmem gerekiyor, bunu nasıl yapmalıyım? İşte

öğedir:

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

Ve bu şekilde atama ediyorum:

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

Yani bu durumda, ben elemanını 8 kez tekrarlamanız gerekir. Lodash'ı kullanan süreç ne olmalı? İşte

+1

Yeni Ar hakkında ne dersiniz? ray (8) .join (' ""); '? – undefined

+0

@Vohuman'ın önerdiği çözüm, işi yapmak için çok temiz bir yoldur. [Lodash docs] (https://lodash.com/docs) içinde tanımlanabilecek bir işlev yoktur. OP, JSX sözdizimini kullanarak DOM oluşturmak isterken, –

+1

@Vohuman bir String oluşturacaktır. – pawel

cevap

5

gitmek:

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

Çok önemli özelliği eksik şikayetçi olmaz Tepki her span elemana anahtarı eklemek isteyebilirsiniz: Daha fazla bilgi hakkında .times için

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

, Buraya bakın: https://lodash.com/docs#times

+0

Bunu “let card” a atamaya çalışıyorum, ancak – StillDead

+0

@ StillDead öğesinin tekrar edilmemesi cevabı güncelledim. Bir göz atın! –

1

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

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

Sen (lodash olmadan) şöyle yapabilirsiniz: herhangi bir harici kütüphaneleri olmadan bu yapmak

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

kısa yoldan:

lodash veya ES6 yayılması olmayan
const n = 8; // Or something else 

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

Hantal olmayan kullanıcılar için harika cevap! ES6 özelliklerine ihtiyaç duyduğuna işaret eden değer (yine de yine de soruda 'let' kullanarak ima edilmiş olduğunu düşünüyorum). –

+0

Typescript 2+ kullananlar için, bu, aynı sonucu elde etmeyen Array (3) .slice(). Map (...) 'şeklinde derlenecektir. Değiştirmek için aşağıdaki @ Jian'ın cevabına bakınız. –

1

çözüm sözdizimi:

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