React Academy · Aula

useImperativeHandle: Valores Personalizados da Instância

Use useImperativeHandle para controlar exatamente o que um componente pai vê quando mantém uma ref para seu componente.

Aula 2 de 412 etapas

useImperativeHandle: Valores Personalizados da Instância é uma aula grátis de React Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.

A referência encaminhada padrão

Quando você encaminha uma referência diretamente para um elemento do DOM, o pai recebe o nó bruto do DOM e obtém acesso a todos os métodos e propriedades nativos dele. Isso geralmente representa uma superfície de acesso maior do que você deseja expor.

Às vezes, é melhor fornecer ao pai um objeto pequeno e cuidadosamente selecionado em vez do nó completo do DOM, mantendo a API pública do componente deliberadamente restrita.

useImperativeHandle substitui o valor da referência

useImperativeHandle permite personalizar o valor para o qual a referência do pai aponta. Em vez do nó do DOM, o pai recebe o objeto que você retornar, de modo que você decide exatamente quais métodos e valores serão expostos.

Isso transforma a referência encaminhada em uma interface imperativa definida, em vez de um simples repasse que deixa escapar o elemento subjacente.

A assinatura de useImperativeHandle

Essa função recebe a referência encaminhada como primeiro argumento e uma função geradora como segundo. A função geradora retorna o objeto de controle que se torna ref.current no pai.

Você a chama como useImperativeHandle(ref, () => ({ ... })), construindo dentro da função geradora o objeto com os métodos e valores que deseja disponibilizar.

Expondo apenas as operações de foco e limpeza

Um padrão comum é um campo de entrada personalizado que expõe apenas as operações de foco e limpeza. Dentro da função geradora, você retorna um objeto com esses dois métodos, cada um operando sobre uma referência interna ao campo de entrada real.

Agora o pai pode focalizar ou limpar o campo, mas não pode ler seu valor bruto nem acionar comportamentos arbitrários do DOM, o que mantém o uso previsível.

Expondo operações de abertura e fechamento em uma janela modal

Os identificadores imperativos combinam bem com diálogos. Um componente Modal pode expor operações de abrir e fechar que alteram seu estado interno de visibilidade, permitindo que o pai o controle imperativamente sem gerenciar sozinho o valor booleano de abertura.

Isso é conveniente para códigos que precisam acionar um diálogo a partir de vários lugares, como ao exibir uma confirmação depois que uma ação assíncrona é concluída.

Limitar a superfície da API é um bom projeto

Ao retornar somente os métodos que pretende oferecer, você cria um contrato claro. Os consumidores dependem de um conjunto pequeno e documentado de operações, em vez da extensa API do DOM, o que torna futuras refatorações mais seguras.

Uma superfície imperativa restrita é mais fácil de testar e de compreender, e tem muito menos probabilidade de ser afetada quando você altera a implementação interna.

A lista de dependências

useImperativeHandle aceita um terceiro argumento opcional: uma lista de dependências. Quando qualquer dependência muda, a função geradora é executada novamente e o objeto de controle é recriado, de modo semelhante ao que ocorre com useMemo e useEffect.

Se os métodos expostos capturarem valores que podem mudar, liste esses valores como dependências para que o pai sempre receba um objeto de controle associado ao estado atual.

Sempre combinado com forwardRef

useImperativeHandle só faz sentido dentro de um componente encapsulado com forwardRef, porque precisa da referência encaminhada para associar a ela o objeto de controle personalizado. Sozinho, ele não teria uma referência do pai para preencher.

Por isso, os dois são usados juntos: forwardRef recebe a referência, e useImperativeHandle define para o que essa referência acaba apontando.

Testando identificadores imperativos

Para testar um objeto de controle, renderize o componente com uma referência, depois chame os métodos por meio de ref.current dentro de um bloco act e verifique o comportamento resultante ou as alterações no DOM.

Como a superfície exposta é pequena e explícita, esses testes são focados: verificam se cada método documentado faz o que seu contrato promete, em vez de examinar detalhes internos.

Tipando o objeto de controle com TypeScript

Em TypeScript, você define uma interface que descreve o objeto de controle, como uma que contenha métodos de foco e limpeza, e então a usa para tipar tanto o parâmetro genérico de forwardRef quanto a referência mantida pelo pai.

Isso oferece preenchimento automático e verificações em tempo de compilação no local da chamada, para que os consumidores vejam exatamente quais métodos existem e os usos incorretos sejam identificados antes da execução.

Verificação rápida: finalidade de useImperativeHandle

Confirme para que useImperativeHandle realmente serve.

Recapitulação: useImperativeHandle

useImperativeHandle personaliza o que uma referência encaminhada expõe, recebendo a referência e uma função geradora que retorna um objeto de controle. Use-o para disponibilizar uma API pequena, como foco e limpeza, ou abrir e fechar em uma janela modal.

Ele sempre é combinado com forwardRef, aceita uma lista de dependências para atualizar o objeto de controle e combina bem com interfaces TypeScript e testes focados. Uma superfície limitada é intencional e representa um bom projeto.

Grátis para começar

Aprenda React com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
88
Aulas
324

Perguntas Frequentes

A aula “useImperativeHandle: Valores Personalizados da Instância” é grátis?

Sim — o texto completo de “useImperativeHandle: Valores Personalizados da Instância” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.

O que vou aprender em “useImperativeHandle: Valores Personalizados da Instância”?

Use useImperativeHandle para controlar exatamente o que um componente pai vê quando mantém uma ref para seu componente. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar React Academy?

Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “useImperativeHandle: Valores Personalizados da Instância”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de React Academy?

Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. forwardRef: Expondo Referências do DOM aos Componentes Pai
  2. useImperativeHandle: Valores Personalizados da Instância
  3. Construindo uma API Imperativa de Componente
  4. Quando Usar APIs Imperativas ou Declarativas
← Voltar para React Academy