【问题标题】:React - how to loop and render n elementsReact - 如何循环和渲染 n 个元素
【发布时间】:2020-10-21 12:22:20
【问题描述】:

目前我正在开发一个应用程序,我想在其中呈现具有 N 行和 N 列的表格。

行数和列数将选择用户。

我在这方面苦苦挣扎太久,我不知道该怎么办。我已经尝试了几种解决方案,这些解决方案是在 stackoverflow 或 Google 上找到的。但我得到的唯一结果是错误。

显然必须有两个循环。第一个循环应该制作 tr,第二个循环应该制作 td 并将它们放在 tr 内。我在 stackoverflow 上的某处读到您必须 像我正在使用的那样使用数组。没有它有什么办法吗?

这是我的功能

function renderBoard(rows,columns){
    let result=[];
    for(var i = 0; i < rows; i++){
        result.push(<tr></tr>)
        for(var j=0;j<columns;j++){
            result[i] = <td></td>
        }
    }
    return result;
}

渲染

return(
        <div>
            <table>
                <tbody>
                    {renderBoard(3,3)}
                </tbody>
            </table>
        </div>
    )

没有第二个 for 循环,它正在制作和渲染三个 .. 但是当我尝试用 td 填充它们时,结果只有三个 td ..

我不知道该怎么办。有人可以帮我吗?

【问题讨论】:

  • 能否添加您要渲染的示例数据?您的问题似乎表明您已经知道自己想要什么,这就是您想要的。首先,for 循环很少用于在 react 中渲染数据。地图功能是首选。添加一些示例数据进行渲染,我们可以提供帮助

标签: javascript reactjs loops for-loop


【解决方案1】:

看起来你每次都用“td”标签覆盖“tr”标签。 尝试创建 2 个单独的数组,然后将它们组合起来。

function renderBoard(intRows, intColumns) {
        var rows = [];
        for (var i = 0; i < intRows; i++) {
            var columns = [];
            for (var j = 0; j < intColumns; j++) {
                columns.push(<td></td>);
            }
            rows.push(<tr>{columns}</tr>);
        }
        return rows;
    }

【讨论】:

  • 谢谢!你能给我一些关于这两个循环内的键的建议吗?由于键,控制台向我抛出错误。我试过这样做。 columns.push();对于行 - rows.push({columns});..但它给我带来了另一个错误,即 2 个元素具有相同的键值
  • 当您使用索引时,当然会有第二行的重复键。您可以将这些键与 key={i+"-"+j}
  • 有什么解决办法吗?所以不会有重复的错误
  • 对不起,点击输入太快了;)。我已经编辑了我的旧评论。
【解决方案2】:

签出这段代码sn-p

render() {
    return <table>
        <thead>
            <tr>
                {this.renderColumns()}
            </tr>
        </thead>
        <tbody>
            {
                this.renderRows()
            }
        </tbody>
    </table>
}


renderRows = () => { 
    const {rows} = this.props;
    return Array(rows).map((row,index) => <tr key={index}>{this.renderColumns(index)}</tr>)
}

renderColumns = (row) => { 
    const {cols} = this.props;
    return Array(cols).map((col , index) => <td key={index}>{row} - {index}</td>)
}

【讨论】:

  • 阿里你在吗?
  • @Pinncik 是的,我有空
  • 可以请教一下吗?
  • 是的,去吧
  • 我的井字游戏有问题。最近我增加了一个功能,可以让你和电脑对战。问题是,当您获胜时,计算机会再移动一次,但它不应该这样做。这是因为我正在异步检查它。所以我尝试添加 useEffect 来检查它。它是这样的 - useEffect(()=>{if(winner !== false){setPlayerVsPlayer({AI:false,AImove:false})}}).. 所以如果有赢家,它应该停止计算机移动但它没有.. 代码框链接在这里 - codesandbox.io/embed/cold-shape-xg7l7?file=/src/…
猜你喜欢
  • 2017-07-20
  • 1970-01-01
  • 2018-03-29
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2021-06-03
相关资源
最近更新 更多