首页 > 解决方案 > 反应 setstate 不重新调整

问题描述

我有以下内容:

  onTransfer = async () => {
    this.setState({loading: true});
    try {
      const accounts = await web3.eth.getAccounts();
      await this.props.myData.methods.transferBalanceToOwner().send({
        from: accounts[0]
      });

      let contractBalance;
      await web3.eth.getBalance(this.props.address).then(function(result) {
        contractBalance = web3.utils.fromWei(result);
      });
      console.log('contract balance: ', contractBalance);

      this.setState({ contractBalance });
    } catch (error) {
      console.log('Transfer to owner error: ',error)
    }
    this.setState({loading: false});  
  }

我的 render() 中有以下内容

if (this.state.isOwner) {
  ownerUI = (
    <Container>
      <Divider/>
      <p>Contract balance: {this.state.contractBalance}</p>
      <Button loading={this.state.loading} onClick={this.onTransfer} primary>Transfer Balance</Button>
    </Container>
  )
}

由于某种原因,合约余额在 OnTransfer 之后没有得到更新。有人可以发现我可能做错了什么吗?谢谢!

标签: reactjsrenderingsetstate

解决方案


它的使用方式不正确async/await

  1. async/await没有那么能_
  2. await语句放在try/catch块内进行 success/error检查。

这样做的正确方法。

let contractBalance;

try {
   //success check

  contractBalance = await web3.eth.getBalance(this.props.address)
  this.setState({contractBalance});

}
catch (rejectedValue) {
  //error check

  console.log(rejectedValue)
}

推荐阅读