2017-10-20 3 views
0

nicht zu werden ich ein Array Zustandsgröße, die ich auf ein Array während der componentWillMount() -MethodeArray Zustandsgröße wird während componentWillMount gesetzt

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(); 
}, 

Wie Sie sehen können erstellt einstellen versuche, ich bevölkern die Variable 'Matrix' in der Methode cwm() und Setzen der Variable 'Matrix' des Status 'gleich dieser neuen Variable' Matrix '. Daher sollte die Zustandsmatrixvariable nach der Ausführung dieser Methode mit einer Reihe von Zellen gefüllt werden.

jedoch in der createGrid() -Methode, die von der CWM() -Methode aufgerufen wird, ich versuche, wie dies ein Element in der Matrix zuzugreifen:

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

Dies verursacht jedoch ein Fehler, der sagt: Kann nicht Lese Eigenschaft '0' von undefiniert.

Ich würde gerne wissen, warum die Statusvariable nicht festgelegt ist und wie ich es beheben kann.

Prost.

Antwort

0

setState ist asynchron, was bedeutet, dass der Staat noch nicht von der Zeit aktualisiert wird Sie this.createGrid();

Sie können auch anrufen createGrid rufen nach dem Zustand in der Funktion als Callback wurde aktualisiert Argument, indem

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

Eine andere mögliche Lösung besteht darin, matrix zu this.createGrid(matrix) zu übergeben und den Zustand dort einzustellen.

Verwandte Themen