Integrando web3 desde Metamask en React [cerrado]

Tiene problemas para integrar web3 desde Metamask en React. Versión Metamask: 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;

Obteniendo el siguiente error:

window is not defined
ReferenceError: window is not defined
    at Object../lib/getWeb3.js (lib/getWeb3.js:5:0)
Este problema no es específico de Ethereum. El problema es que windowno está definido. Sospecho que está ejecutando este script del lado del servidor. Eso probablemente tiene algo que ver con eso. Probablemente obtendrá mejores respuestas si hace su pregunta en Stack Overflow
@Henk, tiene razón, el OP está ejecutando el script en el lado del servidor. Aquí está mi pregunta para usted. ¿ Cuál es el propósito de web3? ¿No nos permite interactuar con los nodos de ethereum? Lo más probable es que nadie esté ejecutando Metamask en su navegador, entonces, ¿cómo hacemos dapps para las personas que no usan Metamask? Hmm, veamos que hay React, Next.js y aquellos ingenieros que usan estas tecnologías para hacer que las dapps estén disponibles para el mundo que no usa Metamask ni Rinkeby se encontrará con estos problemas de vez en cuando.

Respuestas (1)

Pregunta: ¿Su secuencia de comandos se ejecuta en el lado del cliente o en el lado del servidor? Si está en el lado del servidor, entonces no puede acceder al objeto de la ventana.

Si está del lado del cliente, mire esta pregunta https://stackoverflow.com/questions/43220331/is-the-window-object-of-react-synthetic

No creo que importe, OP necesitaba refactorizar su condicional a (typeof window !== 'undefined' && typeof window.web3 !== 'undefined'), entonces su primer regreso se habría ocupado de estar en el navegador, el resto se dejó vacío y OP necesitaba lidiar con el caso de que OP está en el lado del servidor más o menos así: const provider = new Web3.providers.HttpProvider(). Observe el uso de web3y providerspor todo el lugar? Suena ethereum relacionado conmigo.