uck typeerror:_web3client__webpack_imported_module_1 __。minttoken。而不是函数
我正在尝试将我的智能合约与Frontend React JS集成,但是在使用合同方法时,我会遇到此错误。
我之前遇到了React Scripts版本的错误,因此我安装了一个小于5的版本,现在我遇到了此错误。有关系吗?请帮忙。
Uncaught TypeError: _Web3Client__WEBPACK_IMPORTED_MODULE_1__.mintToken.then is not a function
app.js文件
import React, { useEffect, useState } from 'react';
import { init, mintToken } from './Web3Client';
function App() {
const [minted, setMinted] = useState(false);
const mint = () => {
mintToken
.then((tx) => {
console.log(tx);
setMinted(true);
})
.catch((err) => {
console.log(err);
});
};
return (
<div className="App">
{!minted ? (
<button onClick={() => mint()}>Mint Token</button>
) : (
<p>Token Minted successfully</p>
)}
</div>
);
}
export default App;
web3client.js文件
import Web3 from 'web3';
import NFTContract from './NFT.json';
let selectedAccount;
let nftContract;
let isInitialized = false;
export const init = async () => {
let provider = window.ethereum; //
if (typeof provider !== 'undefined') {
//metamask is installed
provider
.request({ method: 'eth_requestAccounts' })
.then((accounts) => {
selectedAccount = accounts[0];
console.log(`selected account is ${selectedAccount}`);
})
.catch((err) => {
console.log(err);
return;
});
window.ethereum.on('accountsChanged', function (accounts) {
selectedAccount = accounts[0];
console.log(`Selected account changed to ${selectedAccount}`);
});
}
const web3 = Web3(provider);
const networkId = await web3.eth.net.getId();
nftContract = new web3.eth.Contract(
NFTContract.abi,
NFTContract.networks[networkId].address
);
isInitialized = true;
};
export const mintToken = async () => {
if (!isInitialized) {
await init();
}
return nftContract.methods
.mint(selectedAccount)
.send({ from: selectedAccount });
};
NFT合同
pragma solidity >=0.8.9;
import '@openzeppelin/contracts/token/ERC721/ERC721.sol';
contract NFT is ERC721 {
constructor() ERC721('Coolest NFT', 'NFT') {}
uint256 private _tokenId = 0;
function mint() external returns (uint256) {
_tokenId++;
_mint(msg.sender, _tokenId);
return _tokenId;
}
}
I am trying to integrate my smart contract with frontend react js but I am getting this error while using methods of the contract.
I got an error of react scripts version before so I installed a version less than 5 and now I am getting this error. Is it related? Please help .
Uncaught TypeError: _Web3Client__WEBPACK_IMPORTED_MODULE_1__.mintToken.then is not a function
App.js file
import React, { useEffect, useState } from 'react';
import { init, mintToken } from './Web3Client';
function App() {
const [minted, setMinted] = useState(false);
const mint = () => {
mintToken
.then((tx) => {
console.log(tx);
setMinted(true);
})
.catch((err) => {
console.log(err);
});
};
return (
<div className="App">
{!minted ? (
<button onClick={() => mint()}>Mint Token</button>
) : (
<p>Token Minted successfully</p>
)}
</div>
);
}
export default App;
Web3Client.js File
import Web3 from 'web3';
import NFTContract from './NFT.json';
let selectedAccount;
let nftContract;
let isInitialized = false;
export const init = async () => {
let provider = window.ethereum; //
if (typeof provider !== 'undefined') {
//metamask is installed
provider
.request({ method: 'eth_requestAccounts' })
.then((accounts) => {
selectedAccount = accounts[0];
console.log(`selected account is ${selectedAccount}`);
})
.catch((err) => {
console.log(err);
return;
});
window.ethereum.on('accountsChanged', function (accounts) {
selectedAccount = accounts[0];
console.log(`Selected account changed to ${selectedAccount}`);
});
}
const web3 = Web3(provider);
const networkId = await web3.eth.net.getId();
nftContract = new web3.eth.Contract(
NFTContract.abi,
NFTContract.networks[networkId].address
);
isInitialized = true;
};
export const mintToken = async () => {
if (!isInitialized) {
await init();
}
return nftContract.methods
.mint(selectedAccount)
.send({ from: selectedAccount });
};
NFT Contract
pragma solidity >=0.8.9;
import '@openzeppelin/contracts/token/ERC721/ERC721.sol';
contract NFT is ERC721 {
constructor() ERC721('Coolest NFT', 'NFT') {}
uint256 private _tokenId = 0;
function mint() external returns (uint256) {
_tokenId++;
_mint(msg.sender, _tokenId);
return _tokenId;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
。然后()
是承诺的回调,但是您的minttoken()
方法不会返回承诺。您需要做到这一点:.then()
is a callback for promises, but yourmintToken()
method does not return a promise. You will need to do this instead: