2017-01-05 76 views
1

我在下面有React組件,我想從函數randomPosition()訪​​問this.state.board(每個元素爲0或1的二維數組)。當我調用randomPosition時,它返回「無法讀取未定義的屬性狀態」。我對這個關鍵字做錯了什麼?this.state在函數中使用時未定義React JS組件

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

} 


}) 

感謝您的幫助!

+0

好,謝謝費利克斯,讓我看一下該鏈接 – chemook78

回答

1

generatePosition function都會有自己的範圍,因此this這個函數裏面將指向其自身的範圍,而不是外部範圍,其中state訪問。您可以存儲outer scope的參考,然後使用這個函數裏面像

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

雖然'this'和範圍有關係,這是不正確的說,'這*是*範圍。 –

+0

我說的是'this'將指向函數的範圍,並不意味着'this'的範圍是 –

+0

但這也是錯誤的。 「範圍」不是可以在JavaScript中引用或指向的內容。 –

相關問題