有没有更好的方法来更新TX哈希?

时间:2018-10-18 07:42:57

标签: reactjs solidity web3js react-state-management

以下是我的代码的一部分(正在运行)

....

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时使用它。

1 个答案:

答案 0 :(得分:0)

您能否更清楚地提出您的问题?您的代码有意义,并且出于某些未知目的看起来不错。这个目的正是我需要知道的。

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

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

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