我有一个数组状态变量,我试图设置为在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;未定义的。
我想知道为什么没有设置状态变量以及如何修复它。
干杯。
答案 0 :(得分:0)
setState
是异步的,这意味着在您拨打this.createGrid();
时,状态尚未更新
通过将函数作为回调参数传递,可以在状态更新后调用createGrid
this.setState({matrix: matrix}, this.createGrid.bind(this));
另一种可能的解决方案是将matrix
传递给this.createGrid(matrix)
并在那里设置状态。