阵列状态变量没有被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)); 
更新后

另一个可能的解决方案是通过matrixthis.createGrid(matrix)并在那里设置状态。