以下是我的代码片段(正在运行)
....
let txhash = '';
class App extends Component {
....
async componentDidMount() {
.....
}
onSubmit = async(event) => {
event.preventDefault();
const accounts = await web3.eth.getAccounts();
this.setState({
message: "Waiting for the transaction to be mined..."
});
await lottery.methods.enterLotteryContract().send({
from: accounts[0],
value: web3.utils.toWei(this.state.value, 'ether')
}).on('transactionHash', function(hash) {
txhash = hash
});
this.setState({
message: "Congrats, the tx has been mined; your txhash is " + txhash
})
console.log(txhash);
});
}
更多在这里:https://github.com/DKSukhani/lottery-react/blob/master/src/App.js
想知道是否有更好的方式让我获得txhash
然后显示它。我希望我可以将txhash
作为状态组件之一而不是将其声明为空变量。此外,我正在使用回调功能,只将其重新分配给txhash
。
你能更清楚地问一下你的问题吗?你的代码很有意义,看起来很不错。这个目的正是我需要知道的。
有了这个,请查看this link关于你可以用on
听的不同事件,因为我认为你正在听错事件或输出错误的文本。当你设置状态的消息说tx被挖掘时我不相信它实际上已经存在。
我会使用confirmation
并且只在事件的第一次触发时显示消息,然后忽略剩余的23.与确认号一起返回的对象描述为here并且有一个transactionHash
变量,你可以用来检查交易是否已经确认,同时获取哈希值。现在你的事件调用不再浪费,你可以使用与txHash相同的setState调用,甚至可以跳过存储txHash(只要你仍然可以异步使用setState)。