[英]Loop for with loop infinite using Break? ReactJs
發生了什么:我有兩個變量: ScorePlayer
和ScoreDealer
,它們是每個cardsPlayer
和cardsDealer
主數組中包含的元素cardsPlayer
和的cardsDealer
。
我想要做的是驗證。 如果ScoreDealer
變量的值小於ScorePlayer
變量的值,我希望它在其中添加更多元素( ScoreDealer
),但我不希望元素的總和超過21
的值。
我使用了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;
}
}
}
有誰能夠幫助我?
rossipedia在這篇文章中指出它很完美。
不要在循環中調用setState。 這里發生的事情恰恰是文檔所指的:由於尚未應用暫掛狀態更新,因此this.state返回先前的值。
您的應用程序一直處於掛起狀態的原因是this.state的值尚未更新,並且直到finishGame
完成執行后才會更新,以及@ Jayce444在上面的注釋中指出的某些錯誤邏輯。
我會在保留大部分邏輯的同時使用的解決方案是
finishGame = () => {
// this is a copy of your array given I'm assuming its a 1D array and you can now mutate it
const cardsDealer = [...this.state.cardsDealer];
// if you chose to update scorePlayer you should declare it as let.
const scorePlayer = this.state.cardsPlayer.reduce((a, b) => a + b);
let scoreDealer = this.state.cardsDealer.reduce((a, b) => a + b);
for (let i = 0; scoreDealer < 21; i++) {
scoreDealer += cardsDealer.shift();
// this will stop if card is >= to 21
if (scoreDealer >= 21) {
break;
}
}
// this will set your cards to the new values after the loop is done running.
this.setState({cardsDealer});
}
鑒於上述功能需要進行很多微調,我希望它可以為您提供一個良好的開端。 編碼愉快!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.