2015-12-09 2 views
9

Я использую React/JSX в своем приложении, чтобы выполнить то, что хочу, также, Lodash.Как повторить элемент n раз, используя JSX

Мне нужно повторить элемент определенное количество раз в зависимости от состояния, как я должен это делать?

Вот элемент:

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

И я задаю его так:

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

Таким образом, в данном случае, мне нужно повторить элемент 8 раз. Каким должен быть процесс с использованием Lodash?

+1

Как насчет 'нового Ar ray (8) .join (''); '? – undefined

+0

Решение, предлагаемое @ Вохуманом, - это очень чистый способ выполнить свою работу. В документе [lodash docs] (https://lodash.com/docs) нет сопоставимой функции. –

+1

@Vohuman он будет генерировать String, в то время как OP хочет создать DOM с использованием синтаксиса JSX. – pawel

ответ

5

Здесь вы идете:

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

Вы можете добавить ключ к каждому элементу span так Реагировать не будет жаловаться на отсутствие ключевого атрибута:

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

Для получения дополнительной информации о .times, см. здесь: https://lodash.com/docs#times

+0

Я пытаюсь присвоить это 'let card', но он не повторяет элемент – StillDead

+0

@StillDead Я обновил ответ. Взгляни! –

1

Вы можете сделать это следующим образом (без 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

Самый короткий способ сделать это без каких-либо внешних библиотек:

const n = 8; // Or something else 

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

Удивительный ответ для пользователей, не являющихся пользователями lodash! Стоит отметить, что для этого требуются функции ES6 (хотя я думаю, что это подразумевается при использовании 'let' в вопросе в любом случае). –

+0

Для тех, кто использует TypScript 2+, это скомпилируется в 'Array (3) .slice(). Map (...)', который не достигает того же результата. См. Ответ @ Jian ниже в качестве замены. –

1

раствор без lodash или ES6 распространения синтаксис:

Array.apply(null, { length: 10 }).map((e, i) => (
    <span className="busterCards" key={i}> 
    ♦ 
    </span> 
)); 
Смежные вопросы