为了账号安全,请及时绑定邮箱和手机立即绑定

反应setState不更新状态

反应setState不更新状态

肥皂起泡泡 2019-12-15 16:08:18
所以我有这个:let total = newDealersDeckTotal.reduce(function(a, b) {  return a + b;},0);console.log(total, 'tittal'); //outputs correct totalsetTimeout(() => {  this.setState({dealersOverallTotal: total});}, 10);console.log(this.state.dealersOverallTotal, 'dealersOverallTotal1'); //outputs incorrect totalnewDealersDeckTotal只是一个数字数组,[1, 5, 9]例如,但是this.state.dealersOverallTotal不能给出正确的总数,但是total可以吗?我什至设置了超时延迟,以查看是否可以解决问题。任何明显的还是我应该发布更多代码?
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

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


this.setState({ dealersOverallTotal: total }, () => {

  console.log(this.state.dealersOverallTotal, 'dealersOverallTotal1');

}); 



查看完整回答
反对 回复 2019-12-16
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

setState是异步的。您可以使用回调方法获取更新状态。


changeHandler(event) {

    this.setState({ yourName: event.target.value }, () => 

    console.log(this.state.yourName));

 }



查看完整回答
反对 回复 2019-12-16
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

setState()需要花费时间来更改值,而您使用的是javascript asynchronous,因此您console.log()将在更改值之前执行您的操作,因此您会setState看到结果。


为了解决这个问题,在日志中的数值callback function of setState一样


setTimeout(() => {this.setState({dealersOverallTotal: total}, function(){

                console.log(this.state.dealersOverallTotal, 'dealersOverallTotal1'); 

         });

      }, 10)



查看完整回答
反对 回复 2019-12-16
  • 3 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信