是否可以在 this.setState 的回调中调用 this.setState?
我正在制作一个 Roguelike Dungeon 并有一个设置,其中在 this.setState 的回调中使用了一个辅助函数,它再次调用 this.setState。我的游戏在这一点上冻结。
所以我在 React 组件中有一个对象,它有一个生成随机二维数组映射的方法:
this.Dungeon.Generate();
当游戏开始时,我们在 componentDidMount() 中调用组件中的以下函数:
componentDidMount: function() {
this.Dungeon.Generate();
this.setState({
board: this.Dungeon.map
}, function() {
this.generateGamePlay();
});
},
this.generateGamePlay() 看起来像这样,基本上是在棋盘上随机生成和放置玩家、老板和物品:
generateGamePlay: function() {
var board = this.state.board.slice();
var startPosition = this.randomPosition();
board[startPosition[0]][startPosition[1]] = this.state.player;
var bossPosition = this.randomPosition();
board[bossPosition[0]][bossPosition[1]] = this.state.boss[this.state.dungeonLevel];
this.generateWeapons(this.state.dungeonLevel,board);
this.generateFood(this.state.dungeonLevel, board);
this.generateEnemies(this.state.dungeonLevel, board);
this.setState({
board: board
});
},
但是当玩家死亡时,我们再次调用上面的方法来重置游戏:
this.Dungeon.Generate();
//generate a new dungeon map, available in this.Dungeon.map
this.setState({
board: this.Dungeon.map, currentMessage: "Game restarted", player: player, weapon: weapon, dungeonLevel: 0
}, function(){
this.generateGamePlay();
})
但那时我的游戏就死机了。因此,我第一次调用 this.generateGamePlay()(调用 this.setState)时它可以工作,但第二次它会冻结。任何人都可以帮助我吗?