2016-03-11 9 views
5

Jeśli mam następujący kod HTML:Czy mogę transkludować dzieci oryginalnego elementu w ReactJS?

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

I zainicjować ReactJS komponent do #myreactcomponent div, mogę jakoś uczynić H1 i element P wewnątrz komponentu? Coś w tym stylu:

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

Czy istnieje opcja do tego w ReactJS?

Możesz sprawdzić to JSFiddle, aby zobaczyć demonstrację mojego problemu.

Dla osób znających Kątowymi: szukam opcję transclude i <ng-transclude/> tag w angularjs dyrektywy w React.

Dla osób znających Polymer: szukam równowartość tag w React <content/>.

UPDATE

Próbowałem właściwość this.props.children, ale o ile rozumiem, to działa tylko wtedy, gdy początkowy HTML jest już w komponencie zareagować. Naprawdę muszę renderować elementy potomne elementu, który początkowo renderowania pierwszy składnik React.

UPDATE 2

Aby przesunąć HTML, do inicjowania elementu (jak pokazano na update of the JSFiddle) nie jest rozwiązaniem w moim przypadku, ze względu na różne systemy, które powodują początkowego HTML i wchodzą w reakcję składniki .

+0

Czy próbowałeś czegoś ...? –

+0

@MoidMohd Próbowałem 'this.props.children', który robi coś prostego, ale tylko jeśli już jesteś w komponencie. Zaktualizowałem swoje pytanie za pomocą JSFiddle, aby lepiej to wyjaśnić. Dzięki. –

+0

Czy masz "wstawić" zawartość 'html' do swojego JSX ..? Coś jak ciąg html wewnątrz twojego kodu ...? –

Odpowiedz

3

Coś takiego .. .

.. 
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>' 

Czy to, co masz na myśli ... Możesz przeczytać więcej o tym here.

+0

Jeśli nie ma "czystego" sposobu, jak w Angular lub Polymer, to tak, to wygląda na to, czego potrzebuję. Nasuwało się tylko pytanie, w jaki sposób "oczyścić" kod HTML, aby niebezpiecznie się tam wstawił (ponieważ nadal jest renderowany w oryginalnym kodzie HTML)? Czy po prostu dostanę element za pomocą id albo tak wyciąć go z oryginalnej strony i wstawić go do komponentu? –

+1

Możesz to zrobić za pomocą getElementById ... lub utworzyć moduł z danymi, a następnie zaimportować go do pliku jsx. –

+0

Zaznaczam to jako poprawne, ponieważ wydaje się, że nie ma "czystego" rozwiązania. Być może możesz również dodać jsfiddle @ user3338229 do swojego rozwiązania? https://jsfiddle.net/6hshvsco/5/ –

2

Tak, aby to zrobić, użyj this.props.children.

Na przykład, jeśli miał komponent React używane tak:

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

można przenosić elementy podrzędne h1 i p, robiąc to w render z MyReactComponent:

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

this.props.children działa tylko dla HTML * wewnątrz * komponentu. Zaktualizowałem swoje pytanie za pomocą JSFiddle, aby było bardziej zrozumiałe. Przepraszam. –

2

Tak, to jest możliwe.

W klasie reagować masz this.props.children

więc w składnik nadrzędny:

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

Następnie w składniku dziecięcej

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 działa tylko dla HTML * wewnątrz * komponentu. Zaktualizowałem swoje pytanie za pomocą JSFiddle, aby było bardziej zrozumiałe. Przepraszam. –

+0

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

+0

to nie jest nie to, czego chcę. Muszę przetłumaczyć HTML, który znajduje się w początkowym kodzie HTML, w którym zainicjowałem (ze względu na architekturę w tym systemie, ten kod HTML pochodzi z innego systemu, i tylko ten system zna kod HTML do renderowania jako element podrzędny. System inicjujący komponenty React doesn ' t już wiesz, że HTML.) –

Powiązane problemy