2017-10-20 16 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'変数をこの新しい 'matrix'変数と同じに設定します。したがって、このメソッドが実行された後、状態行列変数には一連のセルが設定されます。 CWM()メソッドから呼び出されcreateGrid()メソッドでただし

は、私はこのような行列の要素にアクセスしようとする:

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

しかし、これはというエラーが発生しますことはできません未定義の読み取りプロパティ '0'。

私はなぜ状態変数が設定されていないのか、どのように修正できるのかを知りたいと思います。

乾杯。

答えて

0

setState状態はあなたがcreateGridを呼び出すことができます状態は、コールバック引数

this.setState({matrix: matrix}, this.createGrid.bind(this)); 
としての機能に渡すことで、更新された後、あなたが this.createGrid();

を呼び出す時点ではまだ更新されていないことを意味する非同期です

もう1つの解決策は、matrixthis.createGrid(matrix)に渡してそこに状態を設定することです。

関連する問題