在componentWillMount期间未设置数组状态变量

时间:2017-10-20 06:27:47

标签: javascript reactjs

我有一个数组状态变量,我试图设置为在componentWillMount()方法中创建的数组

getInitialState: function() {
return {
  matrix: [],
  generation: 0,
  neighbors: [[0,1], [1,0], [-1, 0], [0, -1], [1, 1], [-1, -1], [-1, 0], [0, -1]]
};
},

componentWillMount: function() {
function Cell() {
    this.neighbors = 0;
    this.isAlive = false;
};

var matrix = [];
var dim = this.props.dim;

for (var i = 0; i < dim; i++) {
  var row = [];
  for (var j = 0; j < dim; j++) {
    row.push(new Cell());
  }
  matrix.push(row);
}

this.setState({matrix: matrix});
this.createGrid();
},

正如您所看到的,我正在填充&#39;矩阵&#39;变量在cwm()方法中并设置状态&#39;矩阵&#39;变量等于这个新的&#39;矩阵&#39;变量。因此,在运行此方法后,应使用一堆Cells填充状态矩阵变量。

但是,在从cwm()方法调用的createGrid()方法中,我尝试访问矩阵中的元素,如下所示:

var currentCell = this.state.matrix[i][j];

然而,这会导致错误,其中包含:无法读取属性&#39; 0&#39;未定义的。

我想知道为什么没有设置状态变量以及如何修复它。

干杯。

1 个答案:

答案 0 :(得分:0)

setState是异步的,这意味着在您拨打this.createGrid();时,状态尚未更新

通过将函数作为回调参数传递,可以在状态更新后调用createGrid

this.setState({matrix: matrix}, this.createGrid.bind(this));

另一种可能的解决方案是将matrix传递给this.createGrid(matrix)并在那里设置状态。