2014-11-11 13 views
6

Sto cercando di capire come modificare i figli di un componente, ad esempio, aggiungere una classe. Ho provato a fare:Modificare gli attributi dei bambini nel componente ReactJS

var inputReactObject = React.Children.only(this.props.children); 

inputReactObject.className = "test"; 

Tuttavia, questo non sembra funzionare.

È possibile modificare gli attributi figli in un componente ReactJS?

plunker completa: http://plnkr.co/edit/msbUSDBQn17qXzBHzGXD?p=preview

+1

Non sono sicuro, ma forse quello che davvero provate a fare è passare gli oggetti di scena da un genitore a un bambino. Dai un'occhiata a questa modifica del tuo plunker: http://plnkr.co/edit/pzI85OPyJjCOpvcZ5SpP – lpiepiora

+0

Il problema con il tuo suggerimento è che l'elemento di input è parte del componente. Mi piacerebbe avere un solo componente da usare per caselle di testo, aree di testo, checkbox, radio box, ecc ...) che richiederebbero la possibilità di modificare i puntelli dei bambini. – ryanzec

+0

Non dovresti modificare gli oggetti di scena, ma puoi clonare un elemento figlio con oggetti di scena (anche se preferirei la soluzione dal mio post sopra). Dai un'occhiata a questo plunkr: http://plnkr.co/edit/tlbDnMl4RoCtI8WNW9qW?p=preview – lpiepiora

risposta

6

Come menzionato da @lpiepiora plunker, il codice per fare quello che voglio sarebbe:

var inputReactObject = React.Children.only(this.props.children); 
var clonnedChild = React.addons.cloneWithProps(inputReactObject, { 
    className: "input-element test" 
}); 

return clonnedChild; 
+0

sostituisce la classe del bambino? – jacoballenwood

+0

@jakeaaron credo di no – Beraliv

3

Ora che cloneWithProps è deprecated, l'attuale approccio sarebbe

var inputReactObject = React.Children.only(this.props.children); 
var clonedChild = React.cloneElement(inputReactObject, { 
    className: "input-element test" 
}); 

return clonedChild; 
Problemi correlati