我是一個學習用React.js構建RPG遊戲的新手,我發現這部分很混亂。(React.js)爲什麼反應無法找到對象?
我試圖更新life
與onClick
當life
< damage
,該object
player
被丟棄。因此,HTML看起來像這樣:
當前玩家被這樣產生的:
<h4>You are: {this.props.targets[this.props.playerindex].name}</h4>
我使用這些代碼來處理攻擊,並更新索引:
handleAttack(index1,id2){
let players = this.state.players.slice();
let index2 = players.findIndex(x => x.id === id2);
let damage = players[index1].damage;
let life = players[index2].life;
console.log("Before(length):"+this.state.players.length);
if (life>damage){
players[index2].life = life-damage;}
else {players=players.filter(player => player.id !== id2);}
this.setState({players},()=>{console.log("After(length):"+this.state.players.length);
this.handleUpdateIndex();});
}
handleUpdateIndex(){
console.log("Before:"+this.state.playerindex);
let index=this.state.playerindex;
let length=this.state.players.length;
console.log("BeforeUpdate(length)"+this.state.players.length);
if(index<length-1)
{this.setState({playerindex:index+1},() => {console.log("After:"+this.state.playerindex);});}
else{this.setState({playerindex:0},() => {console.log("After:"+this.state.playerindex);});}
this.forceUpdate();
}
但是有時候索引會增加,而不應該引起這個問題:
我認爲這可能是setState
的異步行爲,但我不知道該如何解決這個問題。
如果您有解決方案或其他方式來實現預期的行爲,請幫助!
代碼在這裏:
App.js
:https://ghostbin.com/paste/e9wjg
Attack.js
:https://ghostbin.com/paste/3zbwk
分配條件檢查,比如'
您是:{this.props.targets && this.props.targets [this.props.playerindex] && this.props.targets [this.props.playerindex]。名稱}
' –@ShubhamKhatri你能解釋一下這段代碼嗎?它也會停止錯誤按摩,但有時會跳過最後一名玩家(Spud)。 –
事實上,它不是最後一名玩家被跳過,而是一名玩家被殺後的下一名玩家 –