React se encarga de actualizar el DOM por ti. Pero hay situaciones donde necesitas acceso directo a un elemento del DOM:
Para estos casos existe useRef.
Dos pasos:
useRef(null) — crea una "caja" con .current = nullref={inputRef}Después del render, inputRef.current apunta al elemento <input> real del DOM. Puedes hacer lo que quieras con él.
Cuando el componente se monta, el useEffect enfoca el input automáticamente. El usuario puede empezar a escribir sin hacer click.
useRef y useState guardan valores entre renders. La diferencia:
| useState | useRef | |
|---|---|---|
| Cambiar el valor | Re-renderiza | No re-renderiza |
| Cuándo usarlo | Datos que afectan la UI | Datos internos, refs al DOM |
Si el dato afecta lo que se ve en pantalla → usa useState.
Regla simple: si se ve en pantalla, es estado. Si es una herramienta interna (timer ID, referencia al DOM), es ref.
useRef(null) y conéctala al inputuseEffect para enfocar el input automáticamente al cargaruseRef es tu puerta de escape cuando necesitas ir más allá de lo declarativo. Úsalo con moderación — React funciona mejor cuando dejas que él maneje el DOM.