In effetti, React.cloneElement
non è strettamente associato a this.props.children
.
È utile ogni volta che è necessario clonare gli elementi react ( PropTypes.element
) per aggiungere / sovrascrivere gli oggetti di scena, senza che il genitore abbia la conoscenza di quei componenti interni (ad esempio, allegando gestori di eventi o assegnando key
/ ref
attributi).
Anche gli elementi di reazione sono immutabili .
React.cloneElement (element, [props], [... children]) è quasi equivalente a:
<element.type {...element.props} {...props}>{children}</element.type>
Tuttavia, l' children
elica in React è particolarmente utilizzata per il contenimento (ovvero la composizione ), l'accoppiamento con l' React.Children
API e React.cloneElement
, il componente che utilizza props. I bambini possono gestire più logica (ad esempio, transizioni di stato, eventi, misurazioni DOM ecc.) Internamente cedendo la parte di rendering a ovunque sia utilizzato, React Router <switch/>
o un componente composto <select/>
sono alcuni ottimi esempi.
Un'ultima cosa che vale la pena menzionare è che gli elementi di reazione non sono limitati agli oggetti di scena.
function SplitPane(props) {
return (
<div className="SplitPane">
<div className="SplitPane-left">
{props.left}
</div>
<div className="SplitPane-right">
{props.right}
</div>
</div>
);
}
function App() {
return (
<SplitPane
left={
<Contacts />
}
right={
<Chat />
} />
);
}
Possono essere qualunque oggetti di scena che ha un senso, la chiave era quello di definire un contratto buono per il componente, in modo che i consumatori di esso possono essere disaccoppiati dai sottostanti dettagli di implementazione, a prescindere che si tratti di utilizzare React.Children
, React.cloneElement
o addirittura React.createContext
.