You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何渲染数组全部元素?当前仅渲染单个座位

解决React中渲染所有座位的问题

你的核心问题有两个:一是没执行generateSeats函数,二是没有遍历返回的二维数组来渲染每个座位。以下是修复后的代码:

const generateSeats = () => {
    let numRow = 8;
    let numColumn = 3;
    let rowArray = [];
    let start = 1;
    let reachnine = false;

    for(let i=0;i<numRow;i++) {
        let columnArray = [];
        for(let j=0;j<numColumn;j++) {
            let seatObject = {
                number : start,
                taken : Boolean(Math.round(Math.random())),
                selected: false, 
            }
            columnArray.push(seatObject);
            start++;
        }
        if(i==3){
            numColumn += 2
        }
        if(numColumn <9 && !reachnine) {
            numColumn +=2;
        } else {
            reachnine=true;
            numColumn -= 2;
        }
        rowArray.push(columnArray)
    }
    return rowArray
}

const PurchaseTicket = () => {
  // 调用函数获取座位数组
  const seats = generateSeats();

  return (
    <div className='w-full h-full  overflow-auto scrollbar-hide'>
        <div className='w-full h-full flex flex-col bg-black p-4 gap-2'>
            {/* 遍历每一行 */}
            {seats.map((row, rowIndex) => (
                <div key={rowIndex} className='flex gap-2'>
                    {/* 遍历当前行的每个座位 */}
                    {row.map((seat, seatIndex) => (
                        <div 
                            key={`${rowIndex}-${seatIndex}`}
                            className={`w-[30px] h-[30px] rounded-t-[10px] flex items-center justify-center text-xs ${
                                seat.taken ? 'bg-gray-500 text-gray-200' : 'bg-white text-black'
                            }`}
                        >
                            {seat.number}
                        </div>
                    ))}
                </div>
            ))}
        </div>
    </div>
  )
}

关键修改点说明:

  • 调用generateSeats()获取座位数据,存储在变量seats中
  • 用嵌套map遍历二维数组:外层遍历行,内层遍历每行的座位
  • 给每个元素添加唯一的key属性(React列表渲染要求)
  • 根据seat.taken状态设置不同的样式,区分已占用和可选座位
  • 调整了容器布局为flex-col,添加间距和内边距,让座位布局更合理

内容的提问来源于stack exchange,提问作者bamb1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:10:18