Ниже приведен фрагмент моего кода (который работает).
....
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.info(txhash);
});
}
Подробнее здесь: https://github.com/DKSukhani/lottery-react/blob/master/src/App.js
Было интересно, есть ли для меня лучший способ получить txhash и затем отобразить его. Я надеялся, что смогу сделать txhash одним из компонентов состояния, а не объявлять его как пустую переменную. Также я использую функцию обратного вызова только для переназначения ее на txhash.





Можете ли вы задать свой вопрос более четко? Ваш код имеет смысл и отлично выглядит для какой-то неизвестной цели. Однако это именно то, что мне нужно знать.
С учетом сказанного, проверьте эта ссылка на различных событиях, которые вы можете прослушивать с помощью on, поскольку я думаю, что вы слушаете неправильное событие или выводите неправильный текст. Когда вы устанавливаете сообщение состояния, чтобы сказать, что tx был добыт, я не верю, что это было на самом деле.
Я бы использовал confirmation и отображал сообщение только при первом срабатывании события, а затем игнорировал оставшиеся 23. Объект, возвращаемый вместе с номером подтверждения, описан здесь и имеет переменную transactionHash, которую вы можете использовать как для проверки того, что транзакция была подтверждена, так и для получить хеш одновременно. Теперь ваш вызов события больше не такой расточительный, и вы можете использовать тот же вызов setState для сообщения, что и для txHash, или даже вообще пропустить сохранение txHash (при условии, что вы все еще можете использовать setState асинхронно).