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

How to push some HTML every 3 times to array for output

我想在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>

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

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>
    );
  }

另一个选项(我更喜欢可读性)在下面。

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>
  );
}

如果你希望 rows/squares 的数量是动态的,你可以使用以下方法:

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>
  );
}