2016-03-11 12 views
5

Se ho il seguente codice HTML:Posso escludere i figli dell'elemento originale in ReactJS?

<div id="myreactcomponent"> 
    <h1>Headline</h1> 
    <p>Content</p> 
</div> 

E io inizializzare un componente ReactJS nella #myreactcomponent div, posso in qualche modo rendere l'H1 e l'elemento p all'interno del componente? Qualcosa del genere:

return (
    <Header></Header> 
    { place h1 and p here } 
    <Footer></Footer> 
); 

Esiste un'opzione per questo in ReactJS?

È possibile controllare questo JSFiddle per vedere una dimostrazione del mio problema.

Per le persone che hanno familiarità con angolare: Cerco l'opzione transclude e la <ng-transclude/> tag di una direttiva AngularJS a reagire.

Per le persone che hanno familiarità con Polymer: Cerco l'equivalente del tag <content/> a reagire.

UPDATE

ho provato la proprietà this.props.children, ma per quanto ho capito, questo funziona solo se il codice HTML iniziale è già in un componente reagire. Ho davvero bisogno di rendere i figli dell'elemento in cui inizialmente eseguo il rendering del primo componente React.

UPDATE 2

Per spostare il codice HTML nella inizializzazione del componente (come mostrato nella update of the JSFiddle) non è un'opzione nel mio caso, a causa di diversi sistemi che rendono il HTML iniziale e il reagire componenti .

+0

Hai provato qualcosa ..? –

+0

@MoidMohd Ho provato 'this.props.children' che fa qualcosa simliar ma solo se sei già all'interno di un componente. Ho aggiornato la mia domanda con un JSFiddle per spiegarlo meglio. Grazie. –

+0

Hai qualche contenuto 'html' da" inserire "nel tuo JSX ..? Qualcosa come una stringa di html all'interno del tuo codice ...? –

risposta

3

Qualcosa di simile .. .

.. 
render(){ 
return (
<Header></Header> 
<span dangerouslySetInnerHTML={{__html:'content'}}></span> 
<Footer></Footer> 
) 
} 
.. 
var content = '<h1>This is a header</h1><p>This is some para..</p>' 

E 'questo che ti riferisci ... Si può leggere di più su questo here.

+0

Se non esiste un modo "pulito" come in Angular o Polymer per questo, allora sì sembra assomigliare a ciò di cui ho bisogno. L'unica domanda sarebbe, come posso "pulire" il codice HTML per inserirlo pericolosamente lì (perché è ancora reso nell'HTML originale)? Vorrei solo ottenere l'elemento di id o così tagliare fuori dalla pagina originale e inserirlo nel componente? –

+1

Puoi farlo da getElementById ... o creare un modulo con i dati, quindi importarlo nel tuo file jsx. –

+0

Contrassegna questo come corretto in quanto sembra che non ci sia una soluzione "pulita". Forse potresti anche aggiungere il jsfiddle di @ user3338229 alla tua soluzione? https://jsfiddle.net/6hshvsco/5/ –

2

Sì, per fare ciò utilizzare this.props.children.

Per esempio, se tu fossi un componente Reagire utilizzato in questo modo:

<MyReactComponent> 
    <h1>Headline</h1> 
    <p>Content</p> 
</MyReactComponent> 

È possibile trasferire gli elementi figlio h1 e p, facendo questo nel render di MyReactComponent:

return (
    <Header></Header> 
    { this.props.children } 
    <Footer></Footer> 
); 
+0

this.props.children funziona solo per l'HTML * all'interno * del componente. Ho aggiornato la mia domanda con un JSFiddle per renderlo più chiaro. Scusate. –

2

Sì, questo è possibile.

Nella classe reagire voi hanno this.props.children

Così, alla componente principale:

function render() { 
    return <MyComponent><div class="my-child">My text</div></MyComponent>; 
} 

Poi nella componente figlio

function render() { 
    return <div class="child-wrapper">{this.props.children}</div>; 
} 

https://facebook.github.io/react/tips/children-props-type.html

+0

this.props.children funziona solo per l'HTML * all'interno * del componente. Ho aggiornato la mia domanda con un JSFiddle per renderlo più chiaro. Scusate. –

+0

Aggiornamento: https://jsfiddle.net/6hshvsco/3/ – user3338229

+0

questo purtroppo non è quello che voglio. Ho bisogno di escludere l'HTML che si trova nell'HTML iniziale su cui sono inizializzato (a causa dell'architettura di quel sistema, questo HTML proviene da un altro sistema e solo quel sistema conosce l'HTML da renderizzare come child.Il sistema che inizializza i componenti di React non lo fa So che HTML più.) –