微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在React中映射二维数组

如何解决在React中映射二维数组

我有一个名为GridSquare的简单组件:

import React from 'react';
import './GridSquare.css'

const GridSquare = (props) => {
    
    return (
    <div className="empty-square">
    </div>
    )
}

export default GridSquare;

GridSquare的css文件只是使div成为一个简单的灰色方块:

.empty-square{
    display: inline-block;
    height: 30px;
    width: 30px;
    background-color: #555;  
}

我正在尝试使用名为Grid的组件创建这些正方形的网格。我在映射2d数组时遇到困难。映射一维数组可以很好地工作,但二维数组只会打印出空的div。

import React from 'react';
import GridSquare from './GridSqure'

const GameGrid= () => {
    const gamegrid=new Array(20);
    for(let i =0; i<gamegrid.length; i++)
        gamegrid[i] = new Array(20);

    console.log(gamegrid);
    
    return(
        <div>
            {
            gamegrid.map((row)=> 
            {
                return (
                    <div>
                        {
                            row.map(() => <GridSquare/>)
                        }
                    </div>
                )})
            }
        </div>
    )
}

export default GameGrid;

我想念什么?

解决方法

new Array(20)创建一个由20个 empty 元素组成的数组。
map方法会忽略 empty 元素,因此您应该填充数组:gamegrid[i] = new Array(20).fill(null);

,

为什么不这样:

{[...Array(20)].map(() => (
  <div>
    {[...Array(20)].map(() => (
      <GridSquare/>
    ))}
  </div>
))}

您无需在GameGrid常量中定义外部网格的尺寸,而是显式创建一个20的数组,对其进行映射,并创建另一个20的数组以获取您的20X20网格。

注意,您可以将20用作变量,例如let size = 20,因此[...Array(20)]的这一部分将变成[...Array(size)]
这将使您能够动态更改应用程序的网格大小

,

以这种方式初始化数组是不够的。您还应该填充其元素:

for(let i =0; i<gamegrid.length; i++) {
    gamegrid[i] = new Array(20);
    gamegrid[i].fill(1); // this is just an example value
}

此外,您还应该向所有要映射的元素添加键:

return(
    <div>
        {
        gamegrid.map((row,i1)=> 
        {
            return (
                <div key={i1}>
                    {
                        row.map((el,i2) => <GridSquare key={i2} />)
                    }
                </div>
            )})
        }
    </div>
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?