阵列状态变量没有被componentWillMount
问题描述:
期间设置我有我试图设置为componentWillMount()方法阵列状态变量没有被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();
},
正如你可以看到,我填充期间创建的阵列的阵列状态变量cwm()方法中的'matrix'变量,并将状态'matrix'变量设置为等于这个新的'矩阵'变量。所以,在这个方法运行后,状态矩阵变量应该被填充一堆单元格。
然而,在createGrid()方法,该方法从CWM()方法调用我试图访问一个元素在基体中是这样的:
var currentCell = this.state.matrix[i][j];
然而,这导致其说,一个错误:不能读取未定义的属性'0'。
我想知道为什么没有设置状态变量,以及如何修复它。
干杯。
答
setState
是异步的,这意味着状态不是由时间还没有被更新你叫this.createGrid();
您可以拨打createGrid
国家一直在函数传递作为回调参数
this.setState({matrix: matrix}, this.createGrid.bind(this));
更新后
另一个可能的解决方案是通过matrix
到this.createGrid(matrix)
并在那里设置状态。