### [Wagmi Hooks Summary](https://wagmi.sh/react/api/hooks)
### Account & Authentication Hooks
### 1. `useAccount`
**Purpose:** Fetches details about the connected wallet account, such as the account address and connection status.
```js
import { useAccount } from 'wagmi';
function App() {
const { address, isConnected } = useAccount();
return <div>Account: {isConnected ? address : 'Not connected'}</div>;
}
```
### 2. `useConnect`
**Purpose:** Provides functionality to connect a wallet to your Dapp.
```js
import { useConnect } from 'wagmi';
function App() {
const { connect, connectors } = useConnect();
return (
<button onClick={() => connect({ connector: connectors[0] })}>
Connect Wallet
</button>
);
}
```
### 3. `useDisconnect`
**Purpose:** Disconnects the connected wallet from your Dapp.
```js
import { useDisconnect } from 'wagmi';
function App() {
const { disconnect } = useDisconnect();
return <button onClick={disconnect}>Disconnect Wallet</button>;
}
```
### 4. `useEnsAddress`
**Purpose:** Resolves an ENS (Ethereum Name Service) name to an Ethereum address.
```js
import { useEnsAddress } from 'wagmi';
function App() {
const { data: address } = useEnsAddress({
name: 'vitalik.eth',
});
return <div>Address: {address}</div>;
}
```
### 5. `useEnsAvatar`
**Purpose:** Retrieves the avatar associated with an ENS name.
```js
import { useEnsAvatar } from 'wagmi';
function App() {
const { data: avatar } = useEnsAvatar({
name: 'vitalik.eth',
});
return avatar ? <img src={avatar} alt="ENS Avatar" /> : <div>No Avatar</div>;
}
```
### 6. `useEnsName`
**Purpose:** Resolves an Ethereum address to an ENS name, if available.
```js
import { useEnsName } from 'wagmi';
function App() {
const { data: ensName } = useEnsName({
address: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045',
});
return <div>ENS Name: {ensName || 'No ENS Name'}</div>;
}
```
### 7. `useEnsResolver`
**Purpose:** Retrieves the resolver for a given ENS name.
```js
import { useEnsResolver } from 'wagmi';
function App() {
const { data: resolver } = useEnsResolver({
name: 'vitalik.eth',
});
return <div>Resolver: {resolver?.address || 'No Resolver'}</div>;
}
```
### 8. `useSignMessage`
**Purpose:** Signs a message with the connected account’s private key.
```js
import { useSignMessage } from 'wagmi';
function App() {
const { signMessage } = useSignMessage({
message: 'Hello, world!',
});
return <button onClick={signMessage}>Sign Message</button>;
}
```
### 9. `useSignTypedData`
**Purpose:** Signs typed data (EIP-712) with the connected account.
```js
import { useSignTypedData } from 'wagmi';
function App() {
const { signTypedData } = useSignTypedData({
domain: { name: 'My Dapp', version: '1' },
types: { EIP712Domain: [{ name: 'name', type: 'string' }] },
value: { name: 'My Dapp' },
});
return <button onClick={signTypedData}>Sign Typed Data</button>;
}
```
### Network & Blockchain Hooks
### 10. `useNetwork`
**Purpose:** Retrieves information about the connected blockchain network.
```js
import { useNetwork } from 'wagmi';
function App() {
const { chain } = useNetwork();
return <div>Network: {chain?.name}</div>;
}
```
### 11. `useSwitchNetwork`
**Purpose:** Switches the connected wallet to a different network.
```js
import { useSwitchNetwork } from 'wagmi';
function App() {
const { switchNetwork } = useSwitchNetwork();
return (
<button onClick={() => switchNetwork(1)}>
Switch to Ethereum Mainnet
</button>
);
}
```
### 12. `useBlockNumber`
**Purpose:** Retrieves the latest block number from the blockchain.
```js
import { useBlockNumber } from 'wagmi';
function App() {
const { data: blockNumber } = useBlockNumber();
return <div>Latest Block Number: {blockNumber}</div>;
}
```
### 13. `useTransaction`
**Purpose:** Retrieves details of a specific transaction by hash.
```js
import { useTransaction } from 'wagmi';
function App() {
const { data: transaction } = useTransaction({
hash: '0xYourTransactionHash',
});
return <div>Transaction: {transaction?.blockNumber}</div>;
}
```
### 14. `useWaitForTransactionReceipt`
**Purpose:** Waits for a transaction to be confirmed and retrieves its status.
```js
import { useWaitForTransactionReceipt } from 'wagmi';
function App() {
const { data: transactionReceipt } = useWaitForTransactionReceipt({
hash: '0xYourTransactionHash',
});
return <div>Status: {transactionReceipt?.status}</div>;
}
```
### 15. `useChainId`
**Purpose:** Retrieves the chain ID of the current network.
```js
import { useChainId } from 'wagmi';
function App() {
const chainId = useChainId();
return <div>Chain ID: {chainId}</div>;
}
```
### Contract Interaction Hooks
### 16. `useContract`
**Purpose:** Provides a contract instance to interact with.
```js
import { useContract } from 'wagmi';
function App() {
const contract = useContract({
address: '0xYourContractAddress',
abi: YourContractABI,
});
return <div>Contract: {contract?.address}</div>;
}
```
### 17. `useReadContract`
**Purpose:** Reads data from a smart contract.
```js
import { useReadContract } from 'wagmi';
function App() {
const { data } = useReadContract({
address: '0xYourContractAddress',
abi: YourContractABI,
functionName: 'balanceOf',
args: ['0xYourAccountAddress'],
});
return <div>Balance: {data?.toString()}</div>;
}
```
### 18. `useWriteContract`
**Purpose:** Sends transactions to write data to a smart contract.
```js
import { useWriteContract } from 'wagmi';
function App() {
const { write } = useWriteContract({
address: '0xYourContractAddress',
abi: YourContractABI,
functionName: 'transfer',
args: ['0xRecipientAddress', 1000],
});
return <button onClick={() => write()}>Send Tokens</button>;
}
```
### 19. `useContractEvent`
**Purpose:** Listens for events emitted by a contract.
```js
import { useContractEvent } from 'wagmi';
function App() {
useContractEvent({
address: '0xYourContractAddress',
abi: YourContractABI,
eventName: 'Transfer',
listener: (event) => console.log('Transfer Event:', event),
});
return <div>Listening for Transfer events...</div>;
}
```
### 20. `useInfiniteReadContracts`
**Purpose:** Supports infinite scrolling of contract read data.
```js
import { useInfiniteReadContracts } from 'wagmi';
function App() {
const { data, fetchNextPage } = useInfiniteReadContracts({
address: '0xYourContractAddress',
abi: YourContractABI,
functionName: 'getItems',
pagination: true,
});
return (
<div>
{data?.pages.map((page) =>
page.map((item) => <div key={item.id}>{item.name}</div>)
)}
<button onClick={() => fetchNextPage()}>Load More</button>
</div>
);
}
```
### Wallet & Signer Hooks
### 21. `useConnectors`
**Purpose:** Retrieves a list of available wallet connectors, which you can use to connect to different wallets.
```js
import { useConnectors } from 'wagmi';
function App() {
const { connectors } = useConnectors();
return (
<div>
{connectors.map((connector) => (
<button key={connector.id} onClick={() => connector.connect()}>
Connect with {connector.name}
</button>
))}
</div>
);
}
```
### 22. `useBalance`
**Purpose:** Fetches the balance of a specific Ethereum address.
```js
import { useBalance } from 'wagmi';
function App() {
const { data: balance } = useBalance({
address: '0xYourAccountAddress',
});
return <div>Balance: {balance?.formatted} ETH</div>;
}
```
### Utility & Miscellaneous Hooks
### 23. `usePublicClient`
**Purpose:** Provides access to a public RPC client, which is useful for sending read-only requests to the blockchain.
```js
import { usePublicClient } from 'wagmi';
function App() {
const publicClient = usePublicClient();
return <div>Public Client Ready: {publicClient ? 'Yes' : 'No'}</div>;
}
```
### 24. `useToken`
**Purpose:** Fetches details about a specific ERC-20 token.
```js
import { useToken } from 'wagmi';
function App() {
const { data: token } = useToken({
address: '0xTokenContractAddress',
});
return <div>Token Name: {token?.name}</div>;
}
```
### 25. `useSendTransaction`
**Purpose:** Sends a raw Ethereum transaction from the connected wallet.
```js
import { useSendTransaction } from 'wagmi';
function App() {
const { sendTransaction } = useSendTransaction({
to: '0xRecipientAddress',
value: '1000000000000000000', // 1 ETH in wei
});
return <button onClick={() => sendTransaction()}>Send 1 ETH</button>;
}
```
### 26. `useWaitForTransactionReceipt`
**Purpose:** Waits for a transaction to be mined and returns its status.
```js
import { useWaitForTransactionReceipt } from 'wagmi';
function App() {
const { data: receipt } = useWaitForTransactionReceipt({
hash: '0xYourTransactionHash',
});
return <div>Transaction Status: {receipt?.status}</div>;
}
```
### 27. `useWatchBlockNumber`
**Purpose:** Watches for changes in the block number, useful for real-time applications.
```js
import { useWatchBlockNumber } from 'wagmi';
function App() {
useWatchBlockNumber((blockNumber) => {
console.log('New block:', blockNumber);
});
return <div>Watching block number...</div>;
}
```
### 28. `useWatchContractEvent`
**Purpose:** Watches for specific events emitted by a smart contract.
```js
import { useWatchContractEvent } from 'wagmi';
function App() {
useWatchContractEvent({
address: '0xYourContractAddress',
abi: YourContractABI,
eventName: 'Transfer',
listener: (event) => console.log('Transfer event:', event),
});
return <div>Watching contract events...</div>;
}
```
### 29. `useWatchPendingTransactions`
**Purpose:** Watches for pending transactions related to a specific account or contract.
```js
import { useWatchPendingTransactions } from 'wagmi';
function App() {
useWatchPendingTransactions((transaction) => {
console.log('Pending transaction:', transaction);
});
return <div>Watching pending transactions...</div>;
}
```
### 30. `useWatchBlock`
**Purpose:** Watches for new blocks being added to the blockchain and returns the latest block's details.
```js
import { useWatchBlock } from 'wagmi';
function App() {
const { data: latestBlock } = useWatchBlock();
return (
<div>
Latest Block Number: {latestBlock?.number} <br />
Block Timestamp: {latestBlock?.timestamp}
</div>
);
}
```
Will be updating this summary soon...
Have a nice read with a cup of coffee ☕️