Metamask-Zahlung in Reactjs

Ich versuche, eine wirklich einfache und einfache Metamask-Zahlung in Reactjs zu implementieren. Folgendes habe ich getan, handleClick wird durch eine Schaltfläche ausgelöst:

handleClick = () => { 
        let web3 = new Web3(); 
        window.web3 = new Web3(web3.currentProvider);
        web3.eth.sendTransaction({
            to: '0xE08aa75AAE695c4622Cd430FbeBF4B97689d4Ee3',
            from: '0xf59F88E6eA4A937e228E4aaf378e96EDfb646B14',
            value: web3.utils.toWei('1', 'ether'), 
        })      
  };

Ich habe keine Prüfung eingefügt, ob Metamask vorhanden ist, weil ich die einfachste Möglichkeit ausprobieren möchte, um web3js und Reactjs besser zu verstehen. Ich erhalte keinen Fehler, aber es passiert nichts

Antworten (1)

Ich denke, das Problem besteht darin, dass Sie die injizierte web3-Instanz überschreiben.

Die Variable web3 sollte von MetaMask injiziert werden, also überschreiben Sie sie mit Ihrer zweiten Codezeile, stattdessen sollten Sie eine neue Variable erstellen und den Anbieter mit injiziertem web3 festlegen.

Versuche dies:

handleClick = () => { 
        let web3js = new Web3(window.web3.currentProvider); 
        web3js.eth.sendTransaction({
            to: '0xE08aa75AAE695c4622Cd430FbeBF4B97689d4Ee3',
            from: '0xf59F88E6eA4A937e228E4aaf378e96EDfb646B14',
            value: web3js.utils.toWei('1', 'ether'), 
        })      
  };
Vielen Dank für Ihre Antwort, aber wenn ich nichts hinzufüge, let web3 = new Web3();erhalte ich einen „web3“ ist nicht definierter Fehler. (web3js importiert mitimport Web3 from 'web3';
Ah sorry - können Sie versuchen, dies zu tun:let web3js = new Web3(window.web3.currentProvider)
vielen dank, funktioniert jetzt! das ist mein letzter Code:let web3 = new Web3(); let web3js = new Web3(window.web3.currentProvider) web3js.eth.sendTransaction({ to: '0xE08aa75AAE695c4622Cd430FbeBF4B97689d4Ee3', from: '0xf59F88E6eA4A937e228E4aaf378e96EDfb646B14', value: web3.utils.toWei('1', 'ether'),
Ich habe auch meine Antwort aktualisiert, Sie können den ersten Teil loswerden let web3:) - Code sollte genau wie in meiner Antwort funktionieren (hoffentlich :))
nein, ohne let let web3 = new Web3();gibt es mir 'web3' ist sowieso kein definierter Fehler
Ja, weil ich hier einen Fehler hatte, value: web3.utils.toWei('1', 'ether'),überprüfen Sie einfach die aktualisierte Antwort
ok, das Problem war die Verwendung von web3 als Variable. Danke