有更好的方法来更新tx哈希吗?

问题描述 投票:1回答:1

以下是我的代码片段(正在运行)

....

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

reactjs solidity web3js react-state-management
1个回答
0
投票

你能更清楚地问一下你的问题吗?你的代码很有意义,看起来很不错。这个目的正是我需要知道的。

  • 什么时候需要txHash,是在每次调用此函数之后还是在尝试跟踪其他内容。
  • 为什么它不能成为一个状态变量,你没有在你的剪切中包含状态所以我不得不去查看你的其余代码并且没有理由不这样做。您可以在代码段中使用它,因此很明显您可以在某种程度上使用它。我不使用React,所以可能有一些渲染循环,监听器问题或其他原因你不能使用setState。

有了这个,请查看this link关于你可以用on听的不同事件,因为我认为你正在听错事件或输出错误的文本。当你设置状态的消息说tx被挖掘时我不相信它实际上已经存在。

我会使用confirmation并且只在事件的第一次触发时显示消息,然后忽略剩余的23.与确认号一起返回的对象描述为here并且有一个transactionHash变量,你可以用来检查交易是否已经确认,同时获取哈希值。现在你的事件调用不再浪费,你可以使用与txHash相同的setState调用,甚至可以跳过存储txHash(只要你仍然可以异步使用setState)。

© www.soinside.com 2019 - 2024. All rights reserved.