2017-01-05 6 views
1

Ich habe die React-Komponente unten und ich möchte this.state.board (ein 2D-Array mit 0 oder 1 für jedes Element) von einer Funktion randomPosition() zugreifen. Wenn ich randomPosition aufrufen, gibt es zurück "kann den Eigenschaftsstatus von undefined nicht lesen". Mache ich etwas falsch mit diesem Keyword?this.state ist nicht definiert, wenn in der Funktion verwendet React JS-Komponente

var App = React.createClass({ 

getInitialState(){ 

    return { 

    board: [] 

} 

}, 

randomPosition: function(){ 
//generates a random position on this.state.board array 

    var position = []; 
    var positionX = null; 
    var positionY = null; 

    var generatePosition = function(){ 

    positionX = Math.floor(Math.random() * 64); 
    positionY = Math.floor(Math.random() * 64); 

    if(this.state.board[positionX][positionY] === 1){ 

     position.push(positionX, positionY); 
     return position; 

    } else { 

     generatePosition(); 

    } 

    } 

    generatePosition(); 

} 


}) 

danke für die Hilfe!

+0

Ok danke Felix, lassen Sie mich zu diesem Link – chemook78

Antwort

1

Ihr generatePosition function wird seinen eigenen Bereich haben und daher wird this innerhalb dieser Funktion auf seinen eigenen Bereich zeigen, anstatt auf den äußeren Bereich, auf den state zugegriffen werden kann. Sie können die Referenz des outer scope speichern und verwenden Sie dann, dass innerhalb dieser Funktion wie

randomPosition: function(){ 
//generates a random position on this.state.board array 

    var position = []; 
    var positionX = null; 
    var positionY = null; 
    var that = this; 
    var generatePosition = function(){ 

    positionX = Math.floor(Math.random() * 64); 
    positionY = Math.floor(Math.random() * 64); 

    if(that.state.board[positionX][positionY] === 1){ 

     position.push(positionX, positionY); 
     return position; 

    } else { 

     generatePosition(); 

    } 

    } 
+0

einen Blick Während 'this' und Umfang verwandt sind, dann ist es falsch zu sagen, dass' das ist der Umfang. –

+0

Was ich sagte, ist, dass "dies" auf den Umfang der Funktion zeigen wird, es bedeutet nicht, dass "das" ist Bereich –

+0

Aber das ist auch falsch. "Scope" ist nicht etwas, auf das in JavaScript verwiesen oder verwiesen werden kann. –

Verwandte Themen