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;
相关推荐
前端进阶之旅19 小时前
React 18 并发特性实战指南:提升大型应用性能的关键技术
前端·react.js·前端框架
Maimai1080820 小时前
Next.js 16 缓存策略详解:从旧模型到 Cache Components
开发语言·前端·javascript·react.js·缓存·前端框架·reactjs
下北沢美食家20 小时前
React面试题
前端·javascript·react.js
有意义20 小时前
极简的React 实现一
前端·javascript·react.js
打小就很皮...20 小时前
实现可交互的泳道图组件(React)
前端·react.js·泳道图
大雷神21 小时前
HarmonyOS APP<玩转React>开源教程四:状态管理基础
react.js·开源·harmonyos
weixin_446260851 天前
提升开发效率的神器!快速选择编码上下文 — React Grab
前端·react.js·前端框架
Csvn1 天前
使用 React Hooks 优化组件性能的 5 个技巧
前端·javascript·react.js
张一凡931 天前
告别 Redux 的繁琐,试试这个基于类模型的 React 状态管理库:easy-model
前端·react.js
从文处安1 天前
「前端何去何从」一直写 Vue ,为何要在 AI 时代去学 React「2」?
前端·react.js