由于setState未正确更新,JavaScript while循环不正常

时间:2017-01-04 14:34:20

标签: javascript reactjs while-loop

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等 它应该与总数同步,因为我已将其状态设置为与总数

相同

任何人都可以看到它为什么不更新? (我试着把它放在回调中无济于事)

2 个答案:

答案 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)
    }