Web3js
未擷取的類型錯誤:e 不是來自 getAccounts() + web3 1.0.0-beta.37 + truffle + React Dapp 的函式
我正在使用 web3 1.0.0-beta.37 和 trufflfe 創建我的第一個 Dapp
在使用 ganache-CLI 和 Metamask 獲取 app.js 中的帳戶時,出現以下錯誤。
Uncaught TypeError: e is not a function in the console
以下是我的 App.js 程式碼
import React, { Component } from 'react'; import './App.css'; import FormSubmitContract from './contracts/FormSubmit.json'; import getWeb3 from './utils/getWeb3.js'; class App extends Component { state = { web3:null, address:null, }; componentDidMount = async () =>{ try{ const web3 = await getWeb3(); console.log(web3); const accounts = await web3.eth.getAccounts(); console.log(accounts); const networkId = await web3.eth.net.getId(); const deployedNetwork = FormSubmitContract.networks[networkId]; const instance = new web3.eth.contract(FormSubmitContract.abi, deployedNetwork, deployedNetwork.address); }catch(error){ console.log(error); } }
我可以在控制台日誌中列印 web3
Proxy {_requestManager: s, currentProvider: MetamaskInpageProvider, eth: r, db: e.exports, shh: a, …}
但是在
const accounts = await web3.eth.getAccounts(); console.log(accounts); ==> undefined
我認為獲取帳戶的 web3 1+ 版本已經發生了變化。
幫我。提前致謝
在 Metamask 中,轉到設置 -> 隱私和安全 -> 停用“隱私模式”選項。
如果你想使用隱私模式,那麼你必須修改你的程式碼
https://medium.com/metamask/eip-1102-preparing-your-dapp-5027b2c9ed76
幾件事要試驗:
- 嘗試使用 web3 1.0.0-beta.35
- 您是否正在呼叫 window.ethereum.enable() 來解鎖選定的使用者帳戶?
const { ethereum } = window if (ethereum) { try { const web3 = new Web3(ethereum) const selectedAccount = await ethereum.enable() if (!selectedAccount) { // User didn't give permission for dapp to access wallet console.log('User opted out') } else { // User allowed access console.log('user gave access!') } return web3 } catch (error) { // whoopsie! console.log(error) }