Connecting to Phantom wallets with React SDK
useConnect
hook to establish connections with Phantom wallets, supporting both browser extension and embedded wallet types.
import { useConnect } from "@phantom/react-native-sdk";
function ConnectButton() {
const { connect, isLoading, error } = useConnect();
const handleConnect = async () => {
try {
const result = await connect();
console.log("Connection successful:", result);
// result: { walletId: string, addresses: WalletAddress[] }
} catch (error) {
console.error("Connection failed:", error);
}
};
return (
<button onClick={handleConnect} disabled={isLoading}>
{isLoading ? "Connecting..." : "Connect Phantom"}
</button>
);
}
connect()
method returns:
interface ConnectResult {
walletId: string;
addresses: WalletAddress[];
}
interface WalletAddress {
addressType: AddressType; // 'solana', 'ethereum', 'bitcoin', 'sui'
address: string;
}
{
walletId: "wallet_123abc456def",
addresses: [
{
addressType: "solana",
address: "8UviJpZ7Q...x2"
},
{
addressType: "ethereum",
address: "0x742d35...4686"
}
]
}
useAccounts
hook to check if a wallet is already connected:
import { useConnect, useAccounts } from "@phantom/react-native-sdk";
function WalletStatus() {
const { connect } = useConnect();
const accounts = useAccounts(); // WalletAddress[] | null
const isConnected = accounts && accounts.length > 0;
if (isConnected) {
return (
<div>
<p>Connected to Phantom</p>
{accounts.map((account, index) => (
<p key={index}>
{account.addressType}: {account.address}
</p>
))}
</div>
);
}
return (
<button onClick={connect}>
Connect Phantom
</button>
);
}
Was this page helpful?