Conexión y Desconexión
Gestiona el estado de la conexión de la billetera y la selección de múltiples billeteras.
Receta
"use client";
import { useWallet } from "@solana/wallet-adapter-react";
const { connect, disconnect, connected, connecting, wallet, select } = useWallet();Cuándo usar esto:
- Botones de conexión, chips de cuenta y reinicio de sesión.
- Cambio de billeteras sin recarga completa de página.
- Limpieza de estado al cerrar sesión.
Ejemplo Funcional
"use client";
import { useCallback } from "react";
import { useWallet } from "@solana/wallet-adapter-react";
import { useWalletModal } from "@solana/wallet-adapter-react-ui";
export function WalletControls() {
const { connected, disconnect, wallet } = useWallet();
const { setVisible } = useWalletModal();
const handleConnect = useCallback(() => setVisible(true), [setVisible]);
if (!connected) {
return <button onClick={handleConnect}>Seleccionar billetera</button>;
}
return (
<div>
<span>{wallet?.adapter.name}</span>
<button onClick={() => disconnect()}>Desconectar</button>
</div>
);
}Lo que esto demuestra:
- El modal gestiona la selección de múltiples billeteras.
disconnectlimpia la sesión del adaptador.- Muestra el nombre del adaptador para depuración de soporte.
Análisis Profundo
Cómo Funciona
connectnegocia con el adaptador seleccionado a través de Wallet Standard.- El estado se propaga a través del contexto de React.
disconnectdebe limpiar las cachés de la aplicación indexadas por pubkey.reconnectpuede reutilizar el adaptador previo cuandoautoConnectestá habilitado.
Errores Comunes
- Pubkey obsoleta en el estado global después de desconectar - datos incorrectos del usuario. Solución: restablecer almacenes al desconectar.
connect()sin modal cuando hay múltiples billeteras - adaptador ambiguo. Solución: mostrar siempre el selector.- Ignorar el flag
connecting- errores de doble clic. Solución: deshabilitar el botón mientras se conecta. - No retorno del deep link móvil - conexión atascada. Solución: tiempo de espera + reintentar copia.
- Asumir que
connect= permiso de firma - cada transacción aún requiere aprobación.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| Billetera embebida (Phantom embebido) | Incorporación del consumidor | Posicionamiento de autocustodia completa |
| SIWS + sesión de servidor | Inicio de sesión estilo Web2 | Solo autenticación completamente on-chain |
Preguntas Frecuentes
¿Devnet o mainnet?
Coincide la URL de RPC, la red de la billetera y los IDs de programa con un solo clúster.
¿kit vs web3.js?
Usa @solana/kit 7.0.0 para nuevo código frontend.
¿Pruebas?
Surfpool 0.12.0 o devnet con faucet SOL.
¿Nivel de compromiso?
confirmed para UX; finalized para lecturas de alto valor.
¿Next.js App Router?
Proveedores en el layout del cliente; las lecturas pueden ser del lado del servidor.
¿Billetera rechazó la firma?
Muestra reintentar; nunca asumas aprobación.
¿Tarifas de prioridad?
Instrucciones de presupuesto de cómputo en mainnet congestionada.
¿Móvil?
Usa Mobile Wallet Adapter para aplicaciones React Native.
¿Seguridad?
Nunca expongas las keypairs del servidor al navegador.
¿Cambios en IDL?
Regenera clientes tipados en CI.
Relacionado
- UX de Autoconexión y Sesión - sesiones persistentes
- Wallet Adapter - configuración del proveedor
- Firmar Transacciones y Mensajes - después de conectar
Versiones de Stack: Esta página fue escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, y LiteSVM 0.6.x.