在 React 中集成来自 Metamask 的 web3

问题描述 投票:0回答:1

我是 ReactJS 的新手。 似乎无法将来自 Metamask 的 web3 集成到 React 中。 Metamask 版本:[email protected]

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;

出现以下错误:

窗口未定义
ReferenceError:窗口未定义
在 Object../lib/getWeb3.js (lib/getWeb3.js:5:0)

reactjs ethereum web3js
1个回答
2
投票

window
未在服务器上定义,仅在客户端浏览器中定义,因此您不能在服务器端使用 MetaMask。但是,当您想在 React 组件服务器端或没有 MetaMask 支持的情况下使用 web3 时,您可以连接到 INFURA。

最简单的方法是使用react-web3-provider组件。

Web3Provider
添加到根 React 组件中:

import Web3Provider from 'react-web3-provider';

ReactDOM.render(
    <Web3Provider
        defaultWeb3Provider="https://mainnet.infura.io/YOUR_API_KEY"
        loading="Loading..."
    >
        <App />
    </Web3Provider>
)

然后在要使用 Web3 的组件中:

import { withWeb3 } from 'react-web3-provider';

class MyComponent {
    render() {
        const { web3 } = this.props;

        web3.eth.getAccounts(console.log);

        // Version 1.0.0-beta.35
        return "Web3 version: {web3.version}";
    }
}

export default withWeb3(MyComponent);
© www.soinside.com 2019 - 2024. All rights reserved.