0Pricing
Web Accessibility Academy · Lección

Gestionar el foco con refs y useEffect

Controle el foco en un entorno basado en componentes.

Gestionar el foco con refs y useEffect es una lección gratuita de Web Accessibility Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Web Accessibility Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Web Accessibility Academy incluye 4 lecciones en total.

Por qué es necesario gestionar el foco

Cuando aparece, desaparece o se actualiza la interfaz, el foco del teclado puede acabar en el lugar equivocado o desaparecer. En React, puede dirigirlo deliberadamente con refs y efectos.

Una ref apunta a un nodo del DOM

useRef le proporciona una referencia estable a un elemento real. Después del renderizado, ref.current es el nodo real del DOM al que puede llamar .focus().

const inputRef = useRef(null);
<input ref={inputRef} />

useEffect se ejecuta después del renderizado

El foco debe establecerse una vez que el elemento exista en el DOM. useEffect se ejecuta después de que el navegador pinta, por lo que es el lugar seguro para mover el foco.

useEffect(() => {
  inputRef.current.focus();
}, []);

Enfocar al montar

Un array de dependencias vacío significa que el efecto se ejecuta una vez cuando el componente se monta. Úselo para poner el foco en el primer campo de un formulario o paso.

Enfocar cuando algo se abre

Añada una dependencia como isOpen para que el efecto vuelva a ejecutarse cuando cambie el estado. Cuando se abre un panel, puede mover el foco directamente a su interior.

useEffect(() => {
  if (isOpen) panelRef.current.focus();
}, [isOpen]);

Protegerse contra null

Una referencia puede ser null si el nodo todavía no se ha renderizado. Compruebe que ref.current existe antes de llamar a .focus() para evitar un error por la ausencia del elemento.

ref.current?.focus();

Hacer que los elementos que no son entradas puedan recibir el foco

Los encabezados y los divs no pueden recibir el foco de forma predeterminada. Añada tabindex de -1 para que el script pueda enfocarlos sin incorporarlos al orden natural de tabulación.

<div tabindex="-1" ref={regionRef}>...</div>

Restaurar el foco durante la limpieza

Un efecto puede devolver una función de limpieza. Úsela para devolver el foco al activador cuando una capa se desmonta, de modo que los usuarios no terminen al principio de la página.

useEffect(() => {
  const prev = document.activeElement;
  return () => prev.focus();
}, []);

Cuidado con los cierres obsoletos

Un efecto captura los valores de su renderizado. Si establece el foco basándose en datos, inclúyalos en el array de dependencias para que el efecto use valores actualizados y no obsoletos.

forwardRef para elementos secundarios

Para enfocar un elemento dentro de un componente secundario, envuélvalo en forwardRef. De este modo, el componente padre mantiene una referencia al nodo interno y puede enfocarlo.

const Field = forwardRef((props, ref) =>
  <input ref={ref} {...props} />);

No establezca el foco en exceso

Mueva el foco solo cuando realmente ayude al usuario, por ejemplo, al abrir un diálogo o mostrar un error. Capturar el foco en cada renderizado resulta frustrante para todos.

Comprobación rápida

Quiere mover el foco del teclado a un elemento justo después de que React lo renderice. ¿Dónde debe hacerlo?

Resumen: referencias más efectos

Combine useRef con useEffect para mover el foco después del renderizado. Protéjase contra null, restaure el foco durante la limpieza y diríjalo solo cuando sea útil. 🎯

Preguntas frecuentes

¿La lección «Gestionar el foco con refs y useEffect» es gratis?

Sí — el texto completo de «Gestionar el foco con refs y useEffect» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Web Accessibility Academy, actualiza a CoddyKit PRO. El curso de Web Accessibility Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Gestionar el foco con refs y useEffect»?

Controle el foco en un entorno basado en componentes. Practicas Web Accessibility Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Web Accessibility Academy?

No se requiere experiencia previa. Web Accessibility Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Gestionar el foco con refs y useEffect»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Web Accessibility Academy?

Sí. Cada lección de Web Accessibility Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Cambios de ruta sin recargar la página
  2. Gestionar el foco con refs y useEffect
  3. Fragments, Portals y la trampa del orden del DOM
  4. jsx-a11y y controles de calidad a nivel de componente
← Volver a Web Accessibility Academy