如何使用 JSX 和 Loadsh 重复元素 n 次

IT技术 javascript reactjs lodash
2021-04-04 16:16:52

我在我的应用程序中使用 React/JSX 来完成我想要的,还有 Lodash。

我需要根据条件重复某个元素一定次数。我该怎么做?

这是元素:

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

我是这样分配的:

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

所以在这种情况下,我需要重复元素8时间。使用Lodash的过程应该是怎样的?

6个回答

没有任何外部库的情况下执行此操作的最短方法

const n = 8; // Or something else

[...Array(n)].map((e, i) => <span className="busterCards" key={i}>♦</span>)
非 lodash 用户的真棒答案!值得指出的是,它确实需要 ES6 功能(尽管我认为let无论如何在问题中使用它都暗示了这一点)。
2021-05-22 16:16:52
为什么不能这样 Array(n).map((e, i) => <span className="busterCards" key={i}>♦</span>)
2021-06-06 16:16:52
对于那些使用 Typescript 2+ 的人,这将编译成Array(3).slice().map(...)没有达到相同结果的。请参阅下面的@Jian 回答作为替代。
2021-06-09 16:16:52
@KevinWang 因为您的建议将创建一个长度为 8数组,而不是一个由 8 个未定义项组成的数组。迭代不适用于前者。将其放入控制台以查看差异。
2021-06-11 16:16:52
很好,请参阅我的答案,其中详细说明
2021-06-12 16:16:52

没有 lodash 或 ES6 扩展语法的解决方案:

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

干得好:

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

你可能想为每个span元素添加 key,这样 React 就不会抱怨缺少 key 属性:

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

有关 的更多信息.times,请参阅此处:https : //lodash.com/docs#times

或者干脆 const card = _(8).times(idx => <span key=${idx} className="busterCards">♦</span>);
2021-06-03 16:16:52
我试图将它分配给let card,但它没有重复元素
2021-06-14 16:16:52
您也可以简单地返回 _.times(.....) 来渲染元素。确保你也在里面使用了 return (<Element></Element)。
2021-06-17 16:16:52
<section>
      {Array.from({ length: 10 }, (_, i) => <span key={i}>Your text</span>)}
 </section>

这是如何运作的?

Array.from() 在两种情况下使用:

  1. 从类似数组的数据结构创建数组。例如,我们可以使用以下方法将地图转换为数组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]]

  2. 创建一个数组并填写值(当我们需要创建一个包含更多元素的数组时,这会很方便)

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]

虽然此代码可能会回答问题,但提供有关此代码为什么和/或如何回答问题的附加上下文可提高其长期value。
2021-06-19 16:16:52

使用_.timeshttps : //jsfiddle.net/v1baqwxv/

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