Puoi usarlo React.cloneElement
, è meglio sapere come funziona prima di iniziare a usarlo nella tua applicazione. Viene introdotto React v0.13
, continua a leggere per ulteriori informazioni, quindi qualcosa insieme a questo lavoro per te:
<div>{React.cloneElement(this.props.children, {...this.props})}</div>
Quindi porta le righe dalla documentazione di React per farti capire come funziona tutto e come puoi farne uso:
In React v0.13 RC2 introdurremo una nuova API, simile a React.addons.cloneWithProps, con questa firma:
React.cloneElement(element, props, ...children);
A differenza di cloneWithProps, questa nuova funzione non ha alcun comportamento magico incorporato per fondere stile e className per lo stesso motivo per cui non disponiamo di quella funzionalità da transferPropsTo. Nessuno è sicuro di cosa sia esattamente l'elenco completo delle cose magiche, il che rende difficile ragionare sul codice e difficile da riutilizzare quando lo stile ha una firma diversa (ad esempio nel prossimo React Native).
React.cloneElement è quasi equivalente a:
<element.type {...element.props} {...props}>{children}</element.type>
Tuttavia, a differenza di JSX e cloneWithProps, conserva anche i riferimenti. Ciò significa che se ottieni un bambino con un riferimento, non lo ruberai accidentalmente al tuo antenato. Otterrai lo stesso riferimento associato al tuo nuovo elemento.
Un modello comune è mappare i tuoi figli e aggiungere un nuovo sostegno. Sono stati segnalati molti problemi relativi alla perdita di ref di cloneWithProps, che rende più difficile ragionare sul codice. Ora seguendo lo stesso modello con cloneElement funzionerà come previsto. Per esempio:
var newChildren = React.Children.map(this.props.children, function(child) {
return React.cloneElement(child, { foo: true })
});
Nota: React.cloneElement (child, {ref: 'newRef'}) NON sostituisce il ref, quindi non è ancora possibile che due genitori abbiano un ref sullo stesso figlio, a meno che non si utilizzi callback-refs.
Questa è stata una caratteristica fondamentale per entrare in React 0.13 poiché i puntelli ora sono immutabili. Il percorso di aggiornamento è spesso quello di clonare l'elemento, ma così facendo potresti perdere il riferimento. Pertanto, qui avevamo bisogno di un percorso di aggiornamento migliore. Mentre stavamo aggiornando i callites su Facebook ci siamo resi conto che avevamo bisogno di questo metodo. Abbiamo ricevuto lo stesso feedback dalla community. Pertanto, abbiamo deciso di creare un altro RC prima della versione finale per assicurarci di ottenere questo.
Abbiamo in programma di deprezzare React.addons.cloneWithProps. Non lo stiamo ancora facendo, ma questa è una buona opportunità per iniziare a pensare ai tuoi usi e considerare invece l'utilizzo di React.cloneElement. Spediremo sicuramente una versione con avvisi di deprecazione prima di rimuoverla, quindi non è necessaria alcuna azione immediata.
più qui ...