2016-04-19 12 views
0
<div className="header"> 
    <Card> 
     <div className="logo"> 
      <Logo /> 
     </div> 
     <div className="timer"> 
      <Timer /> 
     </div> 
    </Card> 
</div> 

möchte ich so etwas wie dies zu erreichen. Ich habe eine Komponente Card erstellt, jetzt möchte ich, dass diese Komponente beliebige JSX sowie andere Komponenten enthalten sollte.Verschachteln Reagieren Komponenten dynamisch, Hinzufügen von benutzerdefinierten JSX on the fly innerhalb der Komponente?

ich die Art und Weise der Verschachtelung bekommen habe Reagieren Kinder mit React.Children Methode, aber ich bin nicht finden kann, wie die zusätzliche JSX im Innern des Bauteils zu behandeln.

+0

Es ist nur '{}' this.props.children – azium

Antwort

0

Sie können einfach this.props.children verwenden.

diese spezielle Datenstruktur umgehen, können Sie die React.Children utilities verwenden können.

Zum Beispiel, wenn in Ihrem Fall, dass Sie nur eine Verpackung div für jedes Kind Komponente in Karte hinzufügen möchten, können Sie schreiben:

const Card = React.createClass({ 
    render: function() { 
     const wrappedChildren = React.Children.map(
      this.props.children, 
      function(oneChild) { 
       return (
        <div className="wrappingDiv"> 
         {oneChild} 
        </div> 
       ); 
      }, 
     ); 
     return (
      <div className="cardContainer"> 
       {wrappedChildren} 
      </div> 
     ); 
    }, 
}); 

// then: 
<Card> 
    <Logo /> 
    <Timer /> 
</Card> 
+0

die Umhüllung div verschiedenen Klassen auf einer Bedingung basiert enthalten kann, und ich möchte die Logik von der Karte Komponente trennen. –

+0

Dann können Sie das WrappedChildren-Ding in Card-Komponente vergessen und ersetzen Sie es einfach durch this.props.children im Container-Div. Sie können Ihre Komponenten so darstellen, wie Sie sie in Ihre Frage geschrieben haben. Hast du noch ein Problem? –

+0

Aber dann würde es Problem geben, die Elternrequisiten dem Kind zu übergeben. –

0

dies so etwas wie Sie,

var ParentComponent = React.createClass({ 
    render : function(){ 
     var el = (<component_you_want_to_nest />); 
     return(
      <ComponentCardComponent nestComp={el} /> 
     ) 
    } 
}); 

var ComponentCardComponent = React.createClass({ 
render : function(){ 
    <div> 
     {this.props.nestComp} 
    </div> 
} 

});

+0

Ich denke, Sie tun können, 'Kinder = {el}' und 'this.props.children' –