(React.js)为什么react找不到对象?
我是一个新手,正在学习使用 React.js 构建一个 rpg 游戏,我发现这部分非常混乱.
I am a newbie learning to build a rpg game with React.js, and I found this part very confusing.
我正在尝试使用 onClick
更新 life
,当 life
<damage
时,对象
播放器
被丢弃.所以html看起来像这样:
I am trying to update life
with onClick
and when life
<damage
, the object
player
is dropped. So the html looks like this:
当前播放器是这样生成的:
The current player is generated like this:
<h4>You are: {this.props.targets[this.props.playerindex].name}</h4>
我使用这些代码来处理攻击和更新索引:
I use these code to handle attack and update the index:
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();
}
但有时索引会增加而它不应该增加,并导致:
But sometimes the index will increment while it should not, and causes this:
我觉得可能是setState
的异步行为,但是不知道怎么解决这个问题.
I think it might be the asynchronous behavior of setState
, but I don't know how should I solve this problem.
如果您有实现预期行为的解决方案或其他方法,请提供帮助!
If you have a solution or another way to achieve the expected behavior, please help!
代码在这里:
App.js
:https://ghostbin.com/paste/e9wjg
Attack.js
:https://ghostbin.com/paste/3zbwk
推荐答案
我知道我错了:
当我删除一个对象时,我应该将索引向后移动:
when I am dropping a object, I should move the index back:
if (life>damage){
players[index2].life = life-damage;}
else {players=players.filter(player => player.id !== id2);
this.setState({playerindex:this.state.playerindex-1});}
这个问题已经解决了,但是如果你愿意,请给我这个项目的建议!
This problem is solved, however please give me advice on this project if you like!
相关文章