Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ReactJS-有人能解释这个状态是如何改变的,为什么改变的吗?_Javascript_Reactjs_Ecmascript 6_Babeljs - Fatal编程技术网

Javascript ReactJS-有人能解释这个状态是如何改变的,为什么改变的吗?

Javascript ReactJS-有人能解释这个状态是如何改变的,为什么改变的吗?,javascript,reactjs,ecmascript-6,babeljs,Javascript,Reactjs,Ecmascript 6,Babeljs,我试图用React制作康威的人生游戏。我有一个表示网格状态的布尔值数组,然后为真值或假值渲染一个“活动”或“死亡”单元格 我提出的计算周围“活”邻居的数量以确定下一代细胞是活的还是死的解决方案包括将角细胞和边缘细胞与中间细胞的其余部分分开处理 为了做到这一点,我尝试制作网格数组的副本,并在计算相邻单元格的数量后,将表示角单元格和边单元格的元素设置为null。然后,我将迭代剩余的中间单元,并计算它们周围的邻居 但是,在网格副本中将元素更改为null之后,处于状态的原始网格也在更改。有人能解释这种行

我试图用React制作康威的人生游戏。我有一个表示网格状态的布尔值数组,然后为真值或假值渲染一个“活动”或“死亡”单元格

我提出的计算周围“活”邻居的数量以确定下一代细胞是活的还是死的解决方案包括将角细胞和边缘细胞与中间细胞的其余部分分开处理

为了做到这一点,我尝试制作网格数组的副本,并在计算相邻单元格的数量后,将表示角单元格和边单元格的元素设置为null。然后,我将迭代剩余的中间单元,并计算它们周围的邻居

但是,在网格副本中将元素更改为null之后,处于状态的原始网格也在更改。有人能解释这种行为吗

console.log(this.state.grid[topLeftCorner]); // false
innerSquare[topLeftCorner] = null;
console.log(this.state.grid[topLeftCorner]); // null

当您将一个现有数组分配给另一个变量时,您不会得到一个副本,只会得到指向同一数组的两个变量。如果您想创建一个单独的副本,那么考虑使用<代码>数组.SLICE()/CUT>并查看更多细节。

在代码> CONTRONARTURSOR()/<代码>方法中,您以错误的方式创建GRID的副本:

let innerSquare=this.state.grid

这将只复制对网格的引用,而不是克隆它

您应该编写:
let innerSquare=this.state.grid.slice(0)取而代之


添加
.slice(0)
实际上会将网格克隆到一个新数组中。

您如何制作状态副本?你的代码是
让innerSquare=this.state.grid
?这是因为innerSquare引用状态,并且状态是可变的,你需要创建一个状态克隆并处理它。很好的答案:)如果可以的话,我会接受这两个答案。非常感谢你。