2017-03-08 57 views
1

嗨所以這裏的情況。我建立一個井字遊戲反應並且我有3個部件 1. GameParent 2.板3. gameControls爲什麼我的console.log顯示如果我使用的是同一對象的不同屬性值? reactjs

我有GameParent部件內部的函數具有兩個狀態屬性稱爲AI和遊戲,其是對象。我將這些物體作爲道具傳遞給棋盤組件。它也有一個叫做startGame()函數

startGame() { 
    let newAI = new AI(this.state.AIIdentity); 
    let newGame = new Game(newAI,this.state.AIIdentity); 
    this.state.AI.plays(this.state.Game); 
    this.state.Game.start(); 
    this.setState({ 
    start: true, 
    AI: newAI, 
    Game: newGame, 
    }); 
console.log("THIS!!!",this) 
console.log("THIS!!!",this.state) 
console.log("THIS!!!",this) 
console.log("THIS!!!",this.state.Game); 
} 

當this.state.Game.start()被調用時有一個叫應改變遊戲對象內部的狀態爲「正在運行」

財產我將startGame()函數傳遞給我的gameControls組件,並將其附加到我的start按鈕onClick處理程序。

我的板組件處理電路板上的平方的點擊次數,但只註冊點擊,如果Game.status ===「運行」,但我一直有一個狀態===「開始」獲取對象。

所以當我添加這4個console.logs,當我打印出來只有這個,我看到Game對象的狀態是「開始」,但是當我console.log this.state和this.state.Game,狀態設置爲「正在運行」!

我很困惑爲什麼會發生這種情況......我猜這是React更新它的孩子的方式,但是我沒有從閱讀render()和setState()的工作方式中找到解釋。或者,當我將函數和對象傳遞給子組件時,我可能並不完全理解「this」是如何影響的。

如果你們想看到完整的代碼,這裏是鏈接 http://codepen.io/comc49/pen/WRqBXr?editors=0110

+0

這可能會是http://stackoverflow.com/q/23392111/218196相同的問題。 –

回答

0
  1. 你不應該把功能狀態裏面。狀態僅用於數據。我認爲這可能是意外行爲的一個來源。

  2. this.setState是一個異步函數,這意味着不能保證在調用this.setState之後立即設置狀態。這可以解釋從console.logs的意外輸出

相關問題