如何每3次将一些HTML推送到数组以进行输出

时间:2019-06-13 13:26:25

标签: javascript reactjs render

我想在for循环中每3次输出div。

输出未呈现为HTML。

我该如何解决?

render() {
    const squareItems = [];

    for (var i=0; i < 9; i++) {
        if ((i % 3) == 0){
            squareItems.push('<div class="row">');
        }
        squareItems.push(this.renderSquare(i));

        if ((i % 3) == 2){
            squareItems.push('</div>');
        }
    }

    return (
      <div>
        { squareItems }
      </div>
    );
  }

我需要结果:

我尝试使用JSX进行推送,但是无论如何它都需要关闭任何标签。

<div class="row">
 <div>1</div>
 <div>2</div>
 <div>3</div>
</div>
<div class="row">
 <div>4</div>
 <div>5</div>
 <div>6</div>
</div>
<div class="row">
 <div>7</div>
 <div>8</div>
 <div>9</div>
</div>

2 个答案:

答案 0 :(得分:1)

我认为嵌套循环是最简单的解决方案:

render() {
    const squareItems = [];

    for (var i=0; i < 3; i++) {
        squareItems.push(<div class="row">
            {Array(3).map((_, j) => this.renderSquare(i * 3 + j))}
        </div>);
    }

    return (
      <div>
        { squareItems }
      </div>
    );
  }

答案 1 :(得分:0)

下面是另一个选项(为便于阅读,我更喜欢)。

render() {
  return (
    <div>
      {Array(3).fill().map((_, index) => (
        <div class="row">
          {this.renderSquare(index * 3)}
          {this.renderSquare(index * 3 + 1)}
          {this.renderSquare(index * 3 + 2)}
        </div>
      ))}
    </div>
  );
}

如果您希望动态改变行数/平方数,可以使用以下内容:

render() {
  const rowCount = 3;
  const squaresPerRow = 3;

  return (
    <div>
      {Array(rowCount).fill().map((_, rowIndex) => (
        <div class="row">
          {Array(squaresPerRow).fill().map((_, squareIndex) => (
            this.renderSquare(rowIndex * squaresPerRow + squareIndex)
          ))}
        </div>
      ))}
    </div>
  );
}