reactjs - 反应 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 之后没有得到更新。有人可以发现我可能做错了什么吗?谢谢!
解决方案
它的使用方式不正确async/await
。
async/await
没有那么能_- 将
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)
}
推荐阅读
- javascript - node.js] 如何在 server.js 中捕获 GET?
- python - 在数据框中使用 RegexpTokenizer 拆分句子
- vba - Office 365 中保存事件的 Word VBA 事件处理 - 何时触发?
- ruby - rpartition,但只有两个部分
- python - 在保留功能的同时替换 XML 中的字符串
- eclipse - Eclipse - 意外错误加载扩展:org.eclipse.equinox.p2.metadata.repository.compositeRepository
- python - __init__() 缺少 1 个必需的位置参数:“通道”
- android - 如何以正确的方式将日期添加到日历中
- android - SharedPreference.Editor 与 multiSelectListPreference
- spotify - Spotify Connect 和 Windows 物联网