猿问

反应setState不更新状态

所以我有这个:


let total = newDealersDeckTotal.reduce(function(a, b) {

  return a + b;

},

0);


console.log(total, 'tittal'); //outputs correct total

setTimeout(() => {

  this.setState({dealersOverallTotal: total});

}, 10);


console.log(this.state.dealersOverallTotal, 'dealersOverallTotal1'); //outputs incorrect total

newDealersDeckTotal只是一个数字数组,[1, 5, 9]例如,但是this.state.dealersOverallTotal不能给出正确的总数,但是total可以吗?我什至设置了超时延迟,以查看是否可以解决问题。任何明显的还是我应该发布更多代码?


肥皂起泡泡
浏览 238回答 3
3回答

子衿沉夜

setState()通常是异步的,这意味着在您console.log处于状态时,它尚未更新。尝试将日志放入setState()方法的回调中。状态更改完成后执行:this.setState({ dealersOverallTotal: total }, () => {  console.log(this.state.dealersOverallTotal, 'dealersOverallTotal1');}); 

斯蒂芬大帝

setState是异步的。您可以使用回调方法获取更新状态。changeHandler(event) {    this.setState({ yourName: event.target.value }, () =>     console.log(this.state.yourName)); }

猛跑小猪

setState()需要花费时间来更改值,而您使用的是javascript asynchronous,因此您console.log()将在更改值之前执行您的操作,因此您会setState看到结果。为了解决这个问题,在日志中的数值callback function of setState一样setTimeout(() => {this.setState({dealersOverallTotal: total}, function(){                console.log(this.state.dealersOverallTotal, 'dealersOverallTotal1');          });      }, 10)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答