React Academy · Lección

useImperativeHandle: valores de instancia personalizados

Utilice useImperativeHandle para controlar exactamente qué ve un componente padre cuando mantiene una ref a su componente.

Lección 2 de 412 pasos

useImperativeHandle: valores de instancia personalizados es una lección gratuita de React 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 React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.

El ref reenviado predeterminado

Cuando reenvía un ref directamente a un elemento DOM, el padre recibe ese nodo DOM sin modificar y obtiene acceso a todos sus métodos y propiedades nativos. A menudo, esto expone una superficie mayor de la que desea ofrecer.

En ocasiones, es preferible entregar al padre un objeto pequeño y cuidadosamente definido en lugar del nodo DOM completo, para mantener deliberadamente reducida la API pública del componente.

useImperativeHandle reemplaza el valor del ref

useImperativeHandle permite personalizar el valor al que apunta el ref del padre. En lugar del nodo DOM, el padre recibe el objeto que usted devuelva, por lo que decide exactamente qué métodos y valores se exponen.

Esto convierte el ref reenviado en una interfaz imperativa definida, en lugar de un paso directo que expone el elemento subyacente.

La firma del hook

El hook recibe el ref reenviado como primer argumento y una función de fábrica como segundo. La fábrica devuelve el objeto de control que se convierte en ref.current en el padre.

Se utiliza como useImperativeHandle(ref, () => ({ ... })), construyendo dentro de la fábrica el objeto con los métodos y valores que desea poner a disposición.

Exponer solo focus() y clear()

Un patrón habitual es crear un input personalizado que exponga únicamente focus y clear. Dentro de la fábrica, devuelve un objeto con esos dos métodos, cada uno de los cuales opera sobre un ref interno que apunta al input real.

El padre puede enfocar o borrar el campo, pero no puede leer su atributo value sin procesar ni desencadenar comportamientos DOM arbitrarios, lo que mantiene predecible su uso.

Exponer open() y close() en un Modal

Los controles imperativos se adaptan muy bien a los diálogos. Un componente Modal puede exponer los métodos open y close, que cambian su estado interno de visibilidad, para que el padre lo controle imperativamente sin tener que gestionar por sí mismo el booleano open.

Esto resulta práctico para el código que necesita activar un diálogo desde varios lugares, como al mostrar una confirmación después de que finalice una acción asíncrona.

Limitar la superficie de la API es un buen diseño

Al devolver únicamente los métodos que pretende admitir, crea un contrato claro. Los consumidores dependen de un conjunto pequeño y documentado de operaciones en lugar de la extensa API del DOM, lo que hace más seguras las refactorizaciones futuras.

Una superficie imperativa reducida es más fácil de probar y de comprender, y es mucho menos probable que se rompa cuando cambie la implementación interna.

El array de dependencias

useImperativeHandle acepta un tercer argumento opcional: un array de dependencias. Cuando cambia cualquier dependencia, la fábrica se ejecuta de nuevo y el objeto de control se vuelve a crear, de forma similar a como funcionan useMemo y useEffect.

Si los métodos que expone capturan valores que pueden cambiar, incluya esos valores como dependencias para que el padre reciba siempre un objeto de control vinculado al estado actual.

Siempre se combina con forwardRef

useImperativeHandle solo tiene sentido dentro de un componente envuelto con forwardRef, porque necesita el ref reenviado para adjuntarle el objeto de control personalizado. Por sí solo, no habría ningún ref del padre que rellenar.

Por eso se utilizan juntos: forwardRef introduce el ref y useImperativeHandle define a qué acaba apuntando ese ref.

Probar los controles imperativos

Para probar un objeto de control, renderice el componente con un ref, llame a los métodos mediante ref.current dentro de un bloque act y compruebe el comportamiento resultante o los cambios en el DOM.

Como la superficie expuesta es pequeña y explícita, estas pruebas son específicas y verifican que cada método documentado haga lo que promete su contrato, en lugar de examinar detalles internos.

Tipado del objeto de control en TypeScript

En TypeScript, defina una interfaz que describa el objeto de control, como una que incluya los métodos focus y clear, y úsela para tipar tanto el genérico de forwardRef como el ref que conserva el padre.

Esto proporciona autocompletado y comprobaciones en tiempo de compilación en el punto de llamada, de modo que los consumidores ven exactamente qué métodos existen y los usos incorrectos se detectan antes del tiempo de ejecución.

Comprobación rápida: propósito de useImperativeHandle

Confirme cuál es realmente la finalidad de useImperativeHandle.

Resumen: useImperativeHandle

useImperativeHandle personaliza lo que expone un ref reenviado y recibe el ref junto con una fábrica que devuelve un objeto de control. Se utiliza para ofrecer una API pequeña, como focus y clear, u open y close en un modal.

Siempre se combina con forwardRef, admite un array de dependencias para actualizar el objeto de control y funciona bien con interfaces de TypeScript y pruebas específicas. Una superficie limitada es una decisión intencionada y un buen diseño.

Gratis para empezar

Aprende React con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
88
Lecciones
324

Preguntas frecuentes

¿La lección «useImperativeHandle: valores de instancia personalizados» es gratis?

Sí — el texto completo de «useImperativeHandle: valores de instancia personalizados» 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 React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.

¿Qué aprenderé en «useImperativeHandle: valores de instancia personalizados»?

Utilice useImperativeHandle para controlar exactamente qué ve un componente padre cuando mantiene una ref a su componente. Practicas React 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 React Academy?

No se requiere experiencia previa. React 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 «useImperativeHandle: valores de instancia personalizados»?

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 React Academy?

Sí. Cada lección de React 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. forwardRef: exposición de referencias DOM a componentes padre
  2. useImperativeHandle: valores de instancia personalizados
  3. Creación de una API imperativa para componentes
  4. Cuándo utilizar API imperativas frente a declarativas
← Volver a React Academy