React 19 de Cero a Experto / Tiempo real y sistemas distribuidos
Integrar el socket en React: useSocket
Una conexión de socket es un recurso VIVO: se abre, escucha eventos, y debe CERRARSE cuando el
componente se va —o acumulas conexiones fantasma y manejadores duplicados—. Es exactamente el terreno
de useEffect y su cleanup (módulo 3). Y como esa lógica se repite, se empaqueta en un custom hook:
useSocket. Hoy lo construyes y lo pruebas en vivo con el socket simulado —el patrón que usarás con
Socket.io real—.
El recurso que hay que cerrar
useSocket en vivo (con socket simulado)
Aquí un useSocket que conecta al montar, escucha un evento, y limpia al desmontar. Usa un socket
SIMULADO (mismo on/emit de Socket.io) para correr en vivo:
Escribe y envía: tu mensaje llega (eco del "servidor") y el bot responde ~1s después. El useSocket
encapsula todo: abre en el efecto, escucha "mensaje", y —clave— DESUSCRIBE el manejador en el cleanup
(socket.off). Con Socket.io real, cambiarías crearSocketSimulado() por io("https://...") y el
cleanup sería socket.disconnect() —la estructura es idéntica—. El socketRef guarda la conexión para
poder emit desde enviar sin re-crearla en cada render (módulo 3: un ref para un valor mutable que no
repinta).
Las reglas de un socket en React
¿Por qué es crítico el cleanup (socket.off / disconnect) al usar un socket en un useEffect?
Mini-reto
Amplía el useSocket: 1) agrega un estado conectado (booleano) que se ponga en true al montar (y
false al limpiar) para mostrar un indicador "🟢 en línea"; 2) agrega un método limpiar() que vacíe
los mensajes; 3) en un comentario, explica qué pasaría si quitaras el socket.off del cleanup y el
componente se remontara tres veces (pista: cada mensaje aparecería… ¿cuántas veces?). Confirma que el
hook encapsula toda la gestión de la conexión.
Qué sigue
Ya tienes una conexión bien gestionada. La próxima lección la convierte en un CHAT en vivo de verdad: lista de mensajes, envío optimista (que se vea al instante, como el módulo 4), y el manejo de una conversación fluida —el corazón del proyecto final—.