【发布时间】:2018-11-18 00:41:34
【问题描述】:
会发生什么:我有这两个变量:ScorePlayer 和ScoreDealer,它们是它们各自的主数组中包含的元素之和的结果cardsPlayer 和cardsDealer。
而我想要做的是验证。如果ScoreDealer 变量的值小于ScorePlayer 变量的值,我希望它在其中添加更多元素(ScoreDealer)但我不希望元素的总和超过@ 的值987654328@.
我使用了 Break 方法,但无限循环继续并挂起应用程序。
执行此操作的函数:
finishGame = () => {
const scorePlayer = this.state.cardsPlayer.reduce((a, b) => a + b);
const scoreDealer = this.state.cardsDealer.reduce((a, b) => a + b);
for (let i = scoreDealer; scoreDealer < scorePlayer; i++) {
this.setState({
cardsDealer: this.state.cardsDealer.concat(this.state.cards.splice(0, 1))
})
if (scoreDealer === 21) {
break;
}
}
}
谁能帮帮我?
【问题讨论】:
-
您的逻辑似乎不太正确。您在循环外设置了
scoreDealer,所以它永远不会在循环内改变(因此永远不会满足条件)。此外,您似乎将setState()视为同步的,但事实并非如此。setState()是异步的。你不能假设状态在调用后直接改变了。 -
另外,
splice()直接改变调用它的数组,所以你的代码this.state.cards.splice(0, 1)将直接改变状态,这是一个很大的禁忌。直接改变状态会导致问题和不可预测的行为。
标签: javascript reactjs