我在我的应用程序中使用React / JSX以实现我想要的,Lodash。
我需要根据条件重复一定数量的元素,我应该怎么做?
这是元素:
<span className="busterCards">♦</span>;
我这样分配它:
let card;
if (data.hand === '8 or more cards') {
card = <span className="busterCards">♦</span>;
}
所以在这种情况下,我需要重复8次元素。使用Lodash的过程应该是什么?
答案 0 :(得分:103)
执行此操作的最短路径没有任何外部库:
const n = 8; // Or something else
[...Array(n)].map((e, i) => <span className="busterCards" key={i}>♦</span>)
答案 1 :(得分:20)
没有lodash或ES6传播语法的解决方案:
Array.apply(null, { length: 10 }).map((e, i) => (
<span className="busterCards" key={i}>
♦
</span>
));
答案 2 :(得分:14)
你走了:
let card = [];
_.times(8, () => {
card.push(<span className="busterCards">♦</span>);
});
您可能希望为每个span
元素添加密钥,以便React不会抱怨错过关键属性:
let card = [];
_.times(8, (i) => {
card.push(<span className="busterCards" key={i}>♦</span>);
});
有关.times
的详细信息,请参阅此处:https://lodash.com/docs#times
答案 3 :(得分:2)
使用_.times
:https://jsfiddle.net/v1baqwxv/
var Cards = React.createClass({
render() {
return <div>cards {
_.times( this.props.count, () => <span>♦</span> )
}</div>;
}
});
答案 4 :(得分:2)
你可以这样做(没有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>);
}
}
答案 5 :(得分:2)
无需任何外部库的直接选择方法(2021 年):
// straight forward but without key index. Not so good for react but work fine with worning
Array(X).fill(<span className="busterCards">♦</span>)
// with index
Array(X).fill().map((v,i)=> <span className="busterCards">♦</span>)
Array.from( Array(X), (v,i) => <span key={i} className="busterCards">♦</span> )
// same thing basically
Array.from( {length:X}, (v,i) => <span key={i} className="busterCards">♦</span> )
[...Array(3)].map( (_,i)=> <span key={i} className="busterCards">♦</span> )
答案 6 :(得分:1)
您可以创建一个数组,其中包含需要渲染的所有项目,然后在该数组中进行映射以渲染所需数量的正确元素。
const totalItems = 8;
const items = new Array(totalItems).fill(null);
// .... then
return (
{items.map((_, idx) => <span className="busterCards" key = {idx}>♦</span>)}
);
答案 7 :(得分:1)
<section>
{Array.from({ length: 10 }, (_, i) => <span key={i}>Your text</span>)}
</section>
这是如何工作的?
Array.from()
用于两种情况:
从类似数组的数据结构中创建数组。例如,我们可以使用 Array.from()
const map = new Map([ [1, 2], [3, 4], [4, 5] ])
console.log(Array.from(map)) //gives an array - [[1, 2], [3, 4], [4, 5]]
创建数组并填充值(当我们需要创建包含更多元素的数组时,这会很方便)
Array.from()
接受一个对象和一个回调函数。
Array.from({ length: 7 }, (() => 10)) // gives [10,10,10,10,10,10,10]
我们可以利用回调函数内部的索引(第二个参数)来提供唯一的数组元素
Array.from({ length: 4 }, ((_, i) => i + 1)) // [1,2,3,4]
答案 8 :(得分:0)
您可以使用 Lodash range。
_.range(20).map((_n, i) => <MyComponent key={i}/>)
答案 9 :(得分:0)
我正在使用它并且对我有用。
[...Array(10)].map((elementInArray, index) => (
<div key={index}>
Text in Loop
</div>
))