0Pricing
React Academy · Aula

Clonagem e injeção de props com cloneElement

Use React.cloneElement para passar props ocultas dos componentes pai para os filhos.

Clonagem e injeção de props com cloneElement é uma aula grátis de React Academy no CoddyKit. Esta é a aula 4 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.

Boas-vindas

Nesta lição, você usará React.cloneElement para clonar um elemento filho e injetar propriedades adicionais do pai, sem que o filho precise conhecê-las.

O que é cloneElement?

`React.cloneElement(element, props, ...children)` cria um novo elemento React com base em um elemento existente, mesclando as novas propriedades com as propriedades originais. O tipo do elemento original é preservado.
const clone = React.cloneElement(child, { active: true });

Por que usar cloneElement?

Um componente pai pode injetar comportamento (como estado ativo ou manipuladores de eventos) nos filhos sem que eles saibam disso. Isso é usado em sistemas de abas, acordeões e grupos de formulários.

Exemplo de barra de abas

Um componente Tabs pode clonar cada filho Tab e injetar automaticamente as propriedades `isActive` e `onClick`, para que o consumidor não precise conectá-las manualmente.
function Tabs({ children, activeIndex, onChange }) {
  return (
    <div className="tabs">
      {React.Children.map(children, (child, i) =>
        React.cloneElement(child, {
          isActive: i === activeIndex,
          onClick: () => onChange(i),
        })
      )}
    </div>
  );
}

Regras de mesclagem de propriedades

cloneElement mescla as novas propriedades **sobre** as propriedades originais. Se o elemento original já tiver uma propriedade com a mesma chave, o novo valor vencerá. As propriedades de estilo e className são sobrescritas (não mescladas), a menos que você faça isso manualmente.

Mesclando manipuladores de eventos

Para mesclar manipuladores de eventos em vez de sobrescrevê-los, componha manualmente as funções de retorno antes de passá-las para cloneElement.
React.cloneElement(child, {
  onClick: (e) => {
    child.props.onClick?.(e); // original handler
    handleClick(e);           // injected handler
  },
})

Substituindo filhos

O terceiro argumento de `cloneElement` substitui os filhos do elemento. Passe um novo conteúdo para substituir completamente os filhos originais.
// Replace children with wrapped version
React.cloneElement(child, {}, <strong>{child.props.children}</strong>)

Verificando o tipo do elemento antes de cloná-lo

Antes de clonar, verifique se o filho é um elemento React válido e, opcionalmente, confira seu tipo para evitar clonar filhos que não sejam elementos (texto, números ou null).
if (React.isValidElement(child)) {
  return React.cloneElement(child, extraProps);
}
return child;

cloneElement e Contexto

cloneElement é frágil porque exige conhecer a estrutura do filho. O Contexto geralmente é preferível para passar dados implícitos por vários níveis. Use cloneElement somente para injetar propriedades diretamente do pai no filho.

Alternativa moderna: propriedades de renderização e ganchos

Em muitos casos em que cloneElement era usado no passado, um gancho personalizado ou uma propriedade de renderização é mais claro. Considere cloneElement quando você realmente controlar tanto o pai quanto os filhos diretos.

Verificação rápida

O que acontece com uma propriedade que existe tanto no elemento original quanto no objeto de propriedades passado para React.cloneElement?

Recapitulação

React.cloneElement clona um elemento e injeta novas propriedades. Use-o para a injeção implícita de propriedades do pai no filho em componentes compostos. Prefira Contexto ou propriedades de renderização quando a hierarquia for mais profunda.

Curso concluído

Parabéns! Você concluiu **API de filhos do React e padrão de áreas**. Agora você domina props.children, os utilitários de React.Children, as propriedades de áreas nomeadas e cloneElement para criar componentes de layout flexíveis.

Perguntas Frequentes

A aula “Clonagem e injeção de props com cloneElement” é grátis?

Sim — o texto completo de “Clonagem e injeção de props com cloneElement” é 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 “Clonagem e injeção de props com cloneElement”?

Use React.cloneElement para passar props ocultas dos componentes pai para os filhos. 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 4 de 4.

Quanto tempo leva a aula “Clonagem e injeção de props com cloneElement”?

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. Fundamentos de props.children
  2. Utilitários React.Children
  3. Slots nomeados por meio de props de objeto
  4. Clonagem e injeção de props com cloneElement
← Voltar para React Academy