我想在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>
答案 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>
);
}