wagmi使用方法

Wagmi 是一个用于构建与以太坊及其他区块链交互的 React 应用程序的库。它提供了一组工具和钩子,帮助开发者简化钱包连接、状态管理和智能合约交互等功能。

连接一个以太坊钱包并获取用户的地址:

typescript 复制代码
import React from 'react';
import { WagmiConfig, createClient, useAccount, ConnectButton } from 'wagmi';

const client = createClient();

function App() {
  return (
    <WagmiConfig client={client}>
      <div>
        <h1>欢迎使用 Wagmi</h1>
        <ConnectButton />
        <AccountInfo />
      </div>
    </WagmiConfig>
  );
}

function AccountInfo() {
  const { isConnected, address } = useAccount();

  return (
    <div>
      {isConnected ? (
        <p>连接的地址: {address}</p>
      ) : (
        <p>请连接您的钱包。</p>
      )}
    </div>
  );
}

export default App;

常用属性:

typescript 复制代码
useAccount
//isConnected: 布尔值,表示用户是否已连接钱包。
//address: 当前连接的以太坊地址。
//connector: 当前连接的钱包类型。

useProvider/useSigner
//data: 当前的钱包提供者/签名者
//isLoading: 布尔值,表示提供者是否正在加载。

useBalance
//data: 用户账户的余额信息。
//isLoading: 布尔值,表示余额信息是否正在加载。

useContract
//contract: 合约实例,用于与智能合约交互。
//isLoading: 布尔值,表示合约是否正在加载。

常用方法:

typescript 复制代码
//connect() 用于连接用户的钱包,通常与 ConnectButton 一起使用
const { connect } = useAccount();
connect(connector);

//disconnect()
const { disconnect } = useAccount();
disconnect();

//readContract() 读取智能合约数据
const { read } = useContract({
  address: '合约地址',
  abi: 合约ABI,
});
const result = read({ args: [参数] });

//writeContract() 写入数据
const { write } = useContract({
  address: '合约地址',
  abi: 合约ABI,
});
write({ args: [参数] });

综合示例1:

typescript 复制代码
import React from 'react';
import { WagmiConfig, createClient, useAccount, useBalance, ConnectButton } from 'wagmi';

const client = createClient();

function App() {
  const { isConnected, address, disconnect } = useAccount();
  const { data: balance, isLoading } = useBalance({ address });

  return (
    <WagmiConfig client={client}>
      <div>
        <h1>欢迎使用 Wagmi</h1>
        <ConnectButton />
        {isConnected ? (
          <div>
            <p>连接的地址: {address}</p>
            {isLoading ? <p>加载余额...</p> : <p>余额: {balance.formatted} ETH</p>}
            <button onClick={disconnect}>断开连接</button>
          </div>
        ) : (
          <p>请连接您的钱包。</p>
        )}
      </div>
    </WagmiConfig>
  );
}

export default App;

综合示例2:

typescript 复制代码
import React from 'react';
import { WagmiConfig, createClient, useAccount, useContract, useSigner, ConnectButton } from 'wagmi';

const client = createClient();

const contractAddress = '你的合约地址'; // 替换为你的合约地址
const contractABI = [
  // 替换为你的合约 ABI
  {
    "inputs": [{ "internalType": "uint256", "name": "_value", "type": "uint256" }],
    "name": "setValue",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
];

function App() {
  const { isConnected } = useAccount();
  const { data: signer } = useSigner();
  
  const contract = useContract({
    address: contractAddress,
    abi: contractABI,
    signerOrProvider: signer,
  });

  const handleWrite = async () => {
    try {
      const tx = await contract.setValue(42); // 调用合约的 setValue 方法,传入参数 42
      await tx.wait(); // 等待交易确认
      alert('交易成功!');
    } catch (error) {
      console.error('交易失败:', error);
      alert('交易失败!');
    }
  };

  return (
    <WagmiConfig client={client}>
      <div>
        <h1>使用 Wagmi 调用智能合约</h1>
        <ConnectButton />
        {isConnected ? (
          <div>
            <button onClick={handleWrite}>调用 setValue</button>
          </div>
        ) : (
          <p>请连接您的钱包。</p>
        )}
      </div>
    </WagmiConfig>
  );
}

export default App;
相关推荐
光影少年20 小时前
HashRouter 和 BrowserRouter 区别、底层原理、部署差异
前端·react.js·nestjs
kyriewen1 天前
我用 50 行代码重写了 React Router 核心,终于搞懂了前端路由原理
前端·javascript·react.js
ZhengEnCi2 天前
Q02-Vue-React-index.html完全指南
vue.js·react.js·html
weedsfly2 天前
JavaScript 事件流:彻底搞懂捕获、冒泡与事件委托
前端·javascript·react.js
光影少年4 天前
原生DOM操作在React 中的注意事项
前端·javascript·react.js
YAwu114 天前
深入解析 React 炫彩鼠标跟随标题组件:从坐标定位到动画性能
前端·react.js
Ruihong5 天前
🎉 VuReact 1.9.0 发布,支持 Vue 3.4 defineModel 编译到 React
vue.js·react.js·面试
spmcor5 天前
React 架构师之路:Next.js 全栈革命(第八篇)
前端·react.js
假如让我当三天老蒯5 天前
React基础、进阶(学习用)
前端·react.js·面试
spmcor5 天前
为什么页面越用越卡?——React组件内存泄漏的排查与修复
react.js