【发布时间】:2017-01-04 00:57:07
【问题描述】:
首先,必须说这可能是一个setState 问题,因为我遇到了一些麻烦,但我不知道为什么这个while循环不起作用。
代码:
dealerTwisted = () => {
console.log(this.state.dealersOverallTotal, 'total on entry');
let looping = true;
while(looping){
console.log(this.state.dealersOverallTotal,'same');
if(this.state.dealersOverallTotal < 17){
this.deal2Dealer();
let dealersDeck = this.state.dealersDeck;
let newDealersDeckTotal = [];
for (var i=0; i < dealersDeck.length; i++){
newDealersDeckTotal.push(dealersDeck[i].rankValue)
}
let total = newDealersDeckTotal.reduce(function(a, b) {
return a + b;
},
0);
console.log(total, 'tot');
this.setState({ dealersOverallTotal: total });
}
else{
console.log(this.state.dealersOverallTotal, 'logging as greater than 17');
if(this.state.playersOverallTotal > this.state.dealersOverallTotal){
console.log('player wins!');
looping = false;
}
else if (this.state.playersOverallTotal > this.state.dealersOverallTotal){
console.log('its a tie!');
looping = false;
}
else {
console.log('dealer wins!');
looping = false;
}
}
}
};
我认为的方式和我希望它的工作方式如下:
函数被调用,进入循环,如果this.state.dealersOverallTotal 小于 17,则进入 if 块。然后更新总数,然后再次开始循环。你继续进入 if 块,直到你得到一个高于 17 的数字。一旦你进入 else 块,然后无论你在那里遇到什么条件,你都会爆发。
有趣的是,我刚刚调试并发现这条线(第一个控制台日志)console.log(this.state.dealersOverallTotal, 'total on entry'); 每次都给我相同的数字,即没有在里面更新一次。谁能明白为什么?
【问题讨论】:
-
您的调试日志旁边有
i符号吗?有时它会向您显示计算(完成)的值,而不是记录时的值。 -
` this.setState({ DealersOverallTotal: total });` 这个函数可能没有做它应该做的事情。你能把它添加到问题中
-
只用'this.state.dealersOverallTotal = total'?
-
@allnodcoms 我被告知这是不安全的..
-
@Theworm - 刚刚读过书,只有同时使用这两种方法才会不安全。如果您完全忽略它并仅使用分配,它将解决您的问题。 'setState' 不会立即改变值。根据 React 文档,它“设置了一个挂起的状态转换...”,出于性能原因,它可以被延迟或批处理。
标签: javascript reactjs while-loop