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;
相关推荐
寅时码3 分钟前
React 之死·终章:一个 useRef,把闭包陷阱、依赖数组、漫天 rerender 全送走
前端·react.js·ai编程
不好听6137 分钟前
HTML 事件监听机制:从 DOM Level 0 到 React 合成事件
前端·react.js·html
不好听61334 分钟前
React 核心概念:JSX、组件与数据驱动
前端·react.js
触底反弹35 分钟前
🔥 React 零基础入门(中):500 行屎山代码到组件化的蜕变
前端·javascript·react.js
不好听61336 分钟前
React vs Vue:两大前端框架技术选型深度对比
前端·vue.js·react.js
小林ixn2 小时前
从 onclick 到 React 合成事件,再到完整应用逻辑:一次前端架构的深度剖析
前端·react.js·前端框架
Ai_easygo4 小时前
AI Agent开发入门——从ReAct到Tool Calling,拆解Agent的底层运行逻辑
前端·人工智能·react.js
张元清5 小时前
React useResizeObserver Hook:追踪元素尺寸变化(2026)
javascript·react.js
Web3_Daisy8 小时前
什么是 Robinhood Chain?
大数据·人工智能·web3·区块链
葬送的代码人生9 小时前
从 Vue 到 React:Tailwind CSS 布局 + BFF 代理实战
前端·react.js·架构