useComposedRef
Mantiene una ref a tu propio elemento y sigue reenviándola a la ref que haya pasado el padre.
pnpm dlx shadcn@latest add https://hextaui.com/r/use-composed-ref.jsonAñade el hook y todo lo que necesita a tu proyecto.
Copia y pega el siguiente código en tu proyecto.
hooks/use-composed-ref.ts Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
En React 19, ref es una prop normal. Cuando tu componente también necesita el elemento para sí mismo, tienes dos refs y un solo atributo ref. Este hook te da un ref de objeto para leer, más un callback que rellena ambos refs.
Esto compila, pero el ref del padre se descarta, así que ref.current sigue siendo null en el padre. Con useComposedRef, tanto el padre como el componente reciben el elemento.
- El
inputRefdevuelto es unRefObjectnormal, así que puedes pasarlo a hooks que esperan uno, comouseAutosizeouseInvalidShake. setRefmantiene la misma identidad mientras el ref del padre la mantiene, así que React no lo desvincula y vuelve a vincular en cada renderizado.- Funciona con refs de objeto, refs de callback y sin ref alguno.
Usa useComposedRef cuando combines exactamente un ref reenviado con tu propio ref de objeto, que es el caso de la mayoría de los componentes. Usa useMergedRef cuando combines más de dos, cuando uno de ellos sea un ref de callback de otro hook, o cuando un ref de callback reenviado devuelva una función de limpieza de React 19. useComposedRef llama a un ref de callback con null al desmontar en lugar de ejecutar su limpieza.
| Prop | Tipo | Predeterminado |
|---|---|---|
refEl ref que recibió tu componente. | Ref<T> | undefined | – |
| Devuelve | Descripción |
|---|---|
[0] RefObject<T | null> | Tu propio ref al elemento. |
[1] (node: T | null) => void | Pásalo al ref del elemento. Rellena ambos refs. |
Input, Textarea, NativeSelect, Field e InputGroup.
- FieldEtiquetas, descripciones y errores conectados a su control, con estados de validación y diseños para formularios.
- InputUn campo de texto con tres tamaños, estados inválido y de solo lectura, estilos de validación nativos y una fuente táctil de 16px para que los móviles nunca hagan zoom.
- Input groupUn input con iconos, texto, botones o una pista de teclado acoplados, que comparten un solo borde y anillo de foco.
- Native selectEl select propio del navegador, con el estilo de Input, un marcador discreto, compatibilidad con Field y el selector del sistema operativo en cada dispositivo.
- SidebarUna barra lateral de la app que se contrae a iconos o fuera del lienzo, se mantiene fija bajo tu encabezado y se convierte en una hoja deslizable en móviles.
- TextareaTexto de varias líneas que crece con suavidad según lo que escribes entre un mínimo y un máximo de filas, con contadores, validación y un atajo para enviar.