useComposedRef
Mantém uma ref para o seu próprio elemento e, ao mesmo tempo, a encaminha para qualquer ref que o pai tenha passado.
pnpm dlx shadcn@latest add https://hextaui.com/r/use-composed-ref.jsonAdiciona o hook e tudo de que ele depende ao seu projeto.
Copie e cole o código a seguir no seu projeto.
hooks/use-composed-ref.ts Atualize os caminhos de importação para corresponder à configuração do seu projeto.
No React 19, ref é uma prop comum. Quando seu componente também precisa do elemento para si, você tem duas refs e apenas um atributo ref. Este hook dá a você uma ref de objeto para ler, mais um callback que preenche as duas refs.
Isto compila, mas a ref do pai é descartada, então ref.current permanece null no pai. Com useComposedRef, tanto o pai quanto o componente recebem o elemento.
- O
inputRefretornado é umRefObjectnormal, então você pode passá-lo a hooks que esperam um, comouseAutosizeouuseInvalidShake. setRefmantém a mesma identidade enquanto a ref do pai a mantém, então o React não a desanexa e reanexa a cada renderização.- Funciona com refs de objeto, refs de callback e sem ref alguma.
Use useComposedRef quando combinar exatamente uma ref repassada com sua própria ref de objeto, que é o caso da maioria dos componentes. Use useMergedRef quando combinar mais de duas, quando uma delas for uma ref de callback de outro hook, ou quando uma ref de callback repassada retornar uma função de cleanup do React 19. useComposedRef chama uma ref de callback com null ao desanexar em vez de executar seu cleanup.
| Prop | Tipo | Padrão |
|---|---|---|
refA ref que seu componente recebeu. | Ref<T> | undefined | – |
| Retorna | Descrição |
|---|---|
[0] RefObject<T | null> | Sua própria ref para o elemento. |
[1] (node: T | null) => void | Passe para a ref do elemento. Preenche as duas refs. |
Input, Textarea, NativeSelect, Field e InputGroup.
- FieldRótulos, descrições e erros ligados ao seu controle, com estados de validação e layouts para formulários.
- InputUm campo de texto com três tamanhos, estados inválido e somente leitura, estilo de validação nativa e fonte de 16px no toque para que os celulares nunca façam zoom.
- Input groupUm input com ícones, texto, botões ou uma dica de teclado anexados, compartilhando uma única borda e um único anel de foco.
- Native selectO select do próprio navegador, estilizado para combinar com o Input, com um placeholder discreto, suporte a Field e o seletor do sistema operacional em todos os dispositivos.
- SidebarUma barra lateral de app que recolhe para ícones ou fora da tela, permanece fixa sob o seu cabeçalho e vira uma sheet com deslize no celular.
- TextareaTexto de várias linhas que cresce suavemente conforme o que você escreve, entre um número mínimo e máximo de linhas, com contadores, validação e um atalho de envio.