Introdução

O que é React.cloneElement ()?

React.cloneElement () faz parte da API de nível superior React usada para manipular elementos. Ele clona e retorna um novo elemento usando seu primeiro argumento como ponto de partida. Este argumento pode ser um elemento React ou um componente que renderiza um elemento React.

O novo elemento terá as seguintes características:

Os adereços do elemento original com os novos adereços mesclados superficialmente Novos filhos substituem a chave filha existente e a referência do elemento original são preservadas.

React.cloneElement () é útil quando você deseja adicionar ou modificar os adereços dos filhos de um componente pai, evitando códigos duplicados desnecessários.

Sintaxe e uso de React.cloneElement ()

Antes de examinar alguns exemplos, vamos examinar a sintaxe de React.cloneElement (). A sintaxe é fornecida no próximo bloco de código, seguido por algumas definições de termos.

React.cloneElement (element, [props], [… children]) element: O elemento a ser clonado [props]: Props que serão adicionados ao elemento clonado além daqueles do elemento original [… filhos]: Os filhos do objeto clonado. Observe que os filhos do objeto existente não são copiados

Você pode usar React.cloneElement () dentro da definição de um componente pai para realizar os seguintes processos:

Modificar propriedades dos filhos Adicionar às propriedades dos filhos Estender a funcionalidade de componentes filhos

Este artigo se aprofunda em cada um desses três tipos de manipulação usando os seguintes exemplos:

Modificar propriedades dos filhos Personagens repetidos Filhos chiques botão Modificar os atributos do botão de opção imediatamente Clonar outro elemento React como um prop Adicionar às propriedades filhos Texto em negrito Passar prop para um elemento recebido via React.cloneElement () Estenda a funcionalidade dos componentes filhos Alerta ao clicar

Modificar propriedades filhas

Quando você modifica propriedades filhas, isso significa que você altere as propriedades dos filhos em passando-os pelo componente pai .

Não há maneira melhor de explicar do que por meio de exemplos de código reais. Usaremos os seguintes exemplos para ilustrar esse conceito:

Caracteres repetidos Botão filho chique Modificar os atributos dos botões de opção imediatamente Clonar o elemento React como uma propriedade

Antes de prosseguirmos, observe que nestes exemplos, as propriedades modificadas são mescladas superficialmente-a chave e a referência são mantidas. Ainda não há criação de novos filhos, embora veremos isso no último exemplo deste artigo.

1. Caracteres repetidos

No próximo bloco de código, RepeatCharacters é um componente pai e CreateTextWithProps é um componente filho.

CreateTextWithProps tem um atributo chamado ASCIIChar cujo valor é qualquer caractere ASCII válido. RepeatCharacters usará React.cloneElement () para repetir esse caractere no elemento clonado o número de vezes especificado em sua propriedade times.

import React from”react”; Const CreateTextWithProps=({text, ASCIIChar,… props})=> {return ( {text} {ASCIIChar} )}; Const RepeatCharacters=({times, children})=> {return React.cloneElement (children, {//Isso substituirá o ASCIIChar original no texto. ASCIIChar: children.props.ASCIIChar.repeat (times),})} ; Function App () {return (

)} exportar o aplicativo padrão

Abaixo está o resultado conforme visto em um navegador da Web:

2. Botão filho extravagante

Nada extravagante aqui-este é um código que mostra um botão com o texto “Botão extravagante” nele. É a prova de que você pode personalizar esses componentes para atender às suas necessidades.

O componente ButtonContainer usa React.cloneElement () para modificar a aparência do elemento renderizado pelo componente Button.

Em neste caso, você fornece null como o terceiro argumento para React.cloneElement () porque, como um lembrete, você não está criando nenhum filho novo.

import React from”react”; Const ButtonContainer=(props)=> {let newProp={backgroundColor:”# 1560bd”, textColor:’#ffffff’, border:’1px solid #cccccc’, preenchimento:’0.2em’,} return (

{React.Children.map (props.children, child=> {return React.cloneElement (child, {newProp}, null)})}

)}; Const Button=(props)=> {return } function App () {return ( }/>}

)} exportar aplicativo padrão

Estenda a funcionalidade dos componentes filhos

Até agora, você modificou e adicionou adereços filhos. Este exemplo demonstra as últimas características de um elemento clonado porque finalmente estamos criando um novo filho! Este novo filho é passado como o terceiro argumento para React.cloneElement ().

Alerta ao clicar

Neste exemplo, iremos estende a funcionalidade dos filhos.

No próximo bloco de código, um o novo elemento de botão criado por meio de React.cloneElement () do componente Botão tem duas reviravoltas adicionais: um manipulador de eventos onClick e novo texto.

import React de”react”; const Button=()=> {return ()} function App () {return (

{React.cloneElement (Button (),//componente a sobrescrever {onClick: ()=> {//adicionais adereços alert (“Você está fazendo progresso !!!”)}}, <> Botão estilizado com onClick )}

)} exportar o aplicativo padrão

Quando este código é executado, o botão será renderizado com o texto adicionado por meio da função React.cloneElement () que irá ler “Botão estilizado com onClick” como visto no imagem abaixo.

Conclusão

Este artigo explicou como usar a função React.cloneElement () usando sete exemplos diferentes. Quatro desses exemplos explicaram como modificar os adereços de componentes filhos; outros dois exemplos detalham como adicionar adereços a componentes filhos; e, finalmente, nosso último exemplo mostrou como estender a funcionalidade de um componente filho.

Esperançosamente, o que você aprender neste artigo pode adicionar um toque de criatividade aos seus aplicativos React!