最近了解到third-web
这个库,里面有钱包链接和操作功能的丰富集成,之前在做Dapp的时候需要手动处理多个钱包的链接,感觉很不容易,用这个库应该能方便一点。
尝试使用third-web
来构造 dapp。
安装third-web
:
1
| npm install @thirdweb-dev/react @thirdweb-dev/sdk ethers
|
在使用之前,我们需要知道我们的合约地址以及合约部署在哪个网络。
然后在App.tsx
中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import React from "react"; import "./App.css"; import { Route, Routes } from "react-router-dom"; import { HomePage } from "./pages/home/home.page"; import { ThirdwebProvider } from "@thirdweb-dev/react"; import {ConnectWallet} from "@thirdweb-dev/react";
function App() { return ( <div className="App"> <ThirdwebProvider desiredChainId={AppConfig.ChainId}> <ConnectWallet> </ThirdwebProvider> </div> ); }
export default App;
|
运行项目,回看到在页面上有Connect Wallet
的按钮,点击有个下拉,有默认的三个钱包链接的选项:
- MetaMask
- Coinbase Wallet
- WalletConnect
这样已经是可以链接钱包的。
但是在项目中我们无法直接使用,因为ui设计肯定不是这样的。
那看一下如何去自定义Connect Wallet
。
我们创建一个component:customer-wallet-connect.tsx
文件:
1 2 3 4 5 6 7 8 9 10 11 12
| import {useMetamask, useWalletConnect} from "@thirdweb-dev/react";
export default function CustomerConnectWallet() { const connectMetamask = useMetamask(); const walletConnect = useWalletConnect(); return ( <div> <button onClick={connectMetamask}>Connect Metamask</button> <button onClick={walletConnect}>Wallet Connect</button> </div> ) }
|
可以看到,通过使用Hooks的方法,我们可以随便控制该连接哪个钱包。
链接了钱包,我们需要去和合约交互,比如claim
NFT.
创建cliam.tsx
文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| import {useAddress, Web3Button} from "@thirdweb-dev/react";
export default function Claim() { const address = useAddress(); const onSuccess = () => { } const onError = () => { } if (!address) { return ( <div> please connect wallet first! </div> ) } return ( <Web3Button contractAddress={'0xB4C41f17F2fA3a8101aC0928e9298a6BcAC76Ba9'} action={(contract) => contract.erc721.claim(1)} onSuccess={onSuccess} onError={onError} > Claim NFT </Web3Button> ) }
|
使用useAddress()
可以获得当前链接钱包的钱包地址。使用Web3Button
可以直接构造Claim的按钮。
这个按钮内部会自动判断连接状态的,我们需要为了特定的业务,需要手动判断连接状态,当判断已经连接钱包的时候才会出现这个按钮。
这个按钮也自带样式,我们可以传递className来覆盖样式。
third-web也提供了丰富的自定义内容,虽然集成度很高,但在项目中还是需要手动去处理一些事情。以后遇到再积累吧。