亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

反應setState不更新狀態

反應setState不更新狀態

阿晨1998 2019-10-30 12:46:24
所以我有這個: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 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

setState()通常是異步的,這意味著在您console.log處于狀態時,它尚未更新。嘗試將日志放入setState()方法的回調中。狀態更改完成后執行:


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

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

}); 


查看完整回答
反對 回復 2019-10-30
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

setState是異步的。您可以使用回調方法獲取更新狀態。


changeHandler(event) {

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

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

 }


查看完整回答
反對 回復 2019-10-30
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

setState()需要花費時間來更改值,而您使用的是javascript asynchronous,因此您console.log()將在更改值之前執行您的操作,因此您會setState看到結果。


為了解決這個問題,在日志中的數值callback function of setState一樣


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

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

         });

      }, 10)


查看完整回答
反對 回復 2019-10-30
  • 3 回答
  • 0 關注
  • 1211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號