Web3 von Metamask in React integrieren [geschlossen]

Probleme bei der Integration von web3 von Metamask in React. Metamaskenversion: web3@1.0.0-beta.34

import Web3 from 'web3'

let web3;

window.addEventListener('load', function () {
    if (typeof window.web3 !== 'undefined') {        
        web3 = new Web3(window.web3.currentProvider);
    } else {
        // No web 3 provider
        console.log("Please install Metamask");
    }    
});

export default web3;

Bekomme folgenden Fehler:

window is not defined
ReferenceError: window is not defined
    at Object../lib/getWeb3.js (lib/getWeb3.js:5:0)
Dieses Problem ist nicht spezifisch für Ethereum. Das Problem ist, dass windownicht definiert ist. Ich vermute, Sie führen dieses Skript serverseitig aus. Das hat wohl damit zu tun. Sie erhalten wahrscheinlich bessere Antworten, wenn Sie Ihre Frage auf Stack Overflow stellen
@Henk, Sie haben Recht, das OP führt das Skript serverseitig aus. Hier ist meine Frage an Sie. Was ist der Zweck von web3? Erlaubt es uns nicht, mit Ethereum-Knoten zu interagieren? Es besteht die Möglichkeit, dass niemand Metamask in seinem Browser ausführt. Wie erstellen wir also Dapps für Personen, die Metamask nicht verwenden? Hmm, mal sehen, es gibt React, Next.js und die Ingenieure, die diese Technologien verwenden, um DAPPs für die Nicht-Metamask-, Nicht-Rinkeby-Benutzerwelt verfügbar zu machen, werden von Zeit zu Zeit auf diese Probleme stoßen.

Antworten (1)

Frage: Läuft Ihr Skript auf der Clientseite oder auf der Serverseite? Wenn auf der Serverseite - dann können Sie nicht auf das Fensterobjekt zugreifen.

Wenn auf der Clientseite - schauen Sie sich diese Frage an https://stackoverflow.com/questions/43220331/is-the-window-object-of-react-synthetic

Ich denke nicht, dass es wichtig ist, OP musste seine Bedingung in umgestalten (typeof window !== 'undefined' && typeof window.web3 !== 'undefined'), dann hätte seine erste Rückkehr dafür gesorgt, dass sie im Browser war, sein anderes wurde leer gelassen und OP musste sich mit dem Fall befassen, dass OP serverseitig ist ungefähr so: const provider = new Web3.providers.HttpProvider(). Beachten Sie die Verwendung von web3und providersüberall? Klingt für mich nach Ethereum.