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
相关产品推荐
相关产品推荐

