【问题标题】:Is there a better way of updating the tx hash?有没有更好的方法来更新 tx 哈希?
【发布时间】:2019-03-22 23:32:32
【问题描述】:

以下是我的代码的 sn-p(正在运行)

....

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】:

    你能把你的问题问得更清楚一点吗?您的代码很有意义,并且对于某些未知目的看起来很好。不过,这个目的正是我需要知道的。

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

    话虽如此,请查看 this link 以了解您可以使用 on 收听的不同事件,因为我认为您正在收听错误的事件或输出错误的文本。当您将状态消息设置为说 tx 已被开采时,我不相信它实际上已经被开采了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-27
      • 2019-09-03
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 2020-06-19
      相关资源
      最近更新 更多