2017-10-20 72 views
0

期間設置我有我試圖設置爲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'。

我想知道爲什麼沒有設置狀態變量,以及如何修復它。

乾杯。

回答

0

setState是異步的,這意味着狀態不是由時間還沒有被更新你叫this.createGrid();

您可以撥打createGrid國家一直在函數傳遞作爲回調參數

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

另一個可能的解決方案是通過matrixthis.createGrid(matrix)並在那裏設置狀態。