4

我的 Ganche-GUI 和 metamask 正在运行。但我在控制台中收到以下错误

TypeError:无法读取 App.componentDidMount 处未定义的属性“getId”(App.js:17)

以下是我在 App.js 代码中的代码

import React, {Component} from 'react';
import logo from './logo.svg';
import './App.css';
import getWeb3 from './utils/getweb3';
import CrowdFundingContract from './contracts/CrowdFunding.json';

class App extends Component {
state = {web3: null, accounts: null, contracts: null};

componentDidMount = async () => {
try{
  const web3 = await getWeb3();

  const accounts = await web3.eth.getAccounts();

  const networkId = await web3.eth.net.getId();

  const deployedNetwork = CrowdFundingContract.networks[networkId];

  const instance = new web3.eth.Contract(CrowdFundingContract.abi, deployedNetwork && deployedNetwork.address);

  this.setState({web3, accounts, contract: instance}, this.runExample);
}
catch(error){
  alert('Failed to load web3, accounts and contract, check the console');
  console.error(error);
}
};

}

我没有把 render() 和函数 returnExample 放在这里。

请帮我

4

2 回答 2

1

你连接到 eth 提供者了吗?

    const Web3 = require('web3')
    const web3 = new Web3(new Web3.providers.HttpProvider('https://mainnet.infura.io'))

你确定你用的是 web3 1.xx 吗?因为你的代码看起来不错,如果你使用 web3 v0.xx,试试这个:

    web3.version.getNetwork(function(err, res){
      let selectedNetwork = ""

      if (!err) {
          switch (res) {
            case "1":
              selectedNetwork = "Mainnet"
              break
            case "2":
              selectedNetwork = "Morden"
              break
            case "3":
              selectedNetwork = "Ropsten"
              break
            case "4":
              selectedNetwork = "Rinkeby"
              break
            default:
              selectedNetwork = "Unknown network = "+res
        }
        return selectedNetwork
      } else {
        console.log(err)
      }
    })
于 2019-05-18T16:14:29.123 回答
0

根本原因原来是由于无意中安装了错误版本的 web3。我使用了通常的 npm 命令npm install web3,但安装了错误的版本(0.20.x)。安装正确版本后web3@1.2.1问题消失了。

于 2020-05-24T17:30:56.160 回答