reactjs 在React中集成来自Metamask的web3

vhmi4jdf  于 2023-04-05  发布在  React
关注(0)|答案(1)|浏览(177)

我是ReactJS的新手。似乎在React中从Metamask集成web 3时遇到了麻烦。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;

获取以下错误:
未定义窗口
参考错误:未定义窗口
在Object../lib/getWeb3.js(lib/getWeb3.js:5:0)

guykilcj

guykilcj1#

window没有在服务器端定义,只在客户端的浏览器中定义,因此你不能使用MetaMask服务器端。但是,当你想在你的React组件服务器端使用web3或者没有MetaMask支持时,你可以连接到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);

相关问题