So ordnen Sie ein Web3 einem React.js-Zustand zu

Wie würden Sie eine sich ändernde Variable von web3 auf die Komponente „react.js“ abbilden? Beispiel:

Klasse App erweitert Komponente {
  Konstruktor (Requisiten) {
    Super (Requisiten);
    this.state = {
      Blocknummer: web3.eth.blockNummer,
    }
  }

  rendern() {
    zurückkehren(
      {this.state.blockNumber}
    )
  }
}

Was wäre die beste Vorgehensweise ohne die Verwendung von setTimeout/ requestAnimationFrame/setInterval

Antworten (1)

Ich habe es herausgefunden, indem ich Folgendes getan habe:

const web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
const abi = [{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}]," payable":false,"type":"function"},{"payable":false,"type":"fallback"}];
konstante Adresse = "0x3E2A850420e024d2f269d45F85a24Dc6F586277D";
const deployedContract = web3.eth.contract(abi).at(Adresse);
const filter = web3.eth.filter('latest');

Klasse App erweitert Komponente {
  Konstruktor (Requisiten) {
    Super (Requisiten);
    this.state = {
      Blocknummer: web3.eth.blockNummer,
      ...eingesetztVertrag
    }
  }
  KomponenteDidMount(){
    filter.watch((Fehler, Ergebnis) =>{
      const block = web3.eth.getBlock (Ergebnis, wahr);
      this.setState({blockNumber: block.number});
    });
  }

Auf diese Weise wird sich Ihre Reaktionskomponente jedes Mal neu rendern, wenn Sie einen neuen Block haben, sodass Sie immer neue Werte aus Ihrem Vertrag erhalten.

FYI wird in web3 1.0 web3.eth.filterdurch ` web3js.readthedocs.io/en/1.0/web3-eth-subscribe.html ersetzt
Abonnieren funktioniert nur für Websocket-Verbindungen