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 }, () => console.log(this.state.dealersOverallTotal));
}
总的console.log正在做正确的事情,而回调函数没有将dealerOverallTotal更新为total的新值。 例如 总计将记录:每个循环上的4,15,19等 this.state.dealersOverallTotal将在每个循环中记录:12,12,12等 它应该与总数同步,因为我已将其状态设置为与总数
相同任何人都可以看到它为什么不更新? (我试着把它放在回调中无济于事)
答案 0 :(得分:0)
Facebook团队为React写了一篇不错的documentation;)
setState()
不会立即改变this.state,但会创建挂起状态转换。调用此方法后访问this.state可能会返回现有值。 无法保证对setState的调用同步操作,并且可以对调用进行批处理以提高性能。
我真的不知道你为什么要这样做,但这不是做这件事的好办法。
答案 1 :(得分:0)
setState()不会立即改变this.state,但会创建挂起状态转换。在调用此方法后访问this.state可能会返回现有值。
但是当控制进入render()函数时状态会更新:
var storeState;
inXYZ()
{
this.setState({ dealersOverallTotal: total })
//no state update
console.log('state is updated',this.state.dealersOverallTotal)
}
render()
{
//updated over here
storeState=this.state.dealersOverallTotal;
console.log('state is updated',this.state.dealersOverallTotal)
}