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

このようなことを達成したいと思います。私はコンポーネントカードを作成しましたが、今はこのコンポーネントにランダムJSXと他のコンポーネントが含まれている必要があります。コンポーネントを動的に反応させ、コンポーネント内でカスタムJSXをオンザフライで追加しますか?

React.Childrenメソッドを使用してReact Childrenを入れ子にする方法がありますが、コンポーネント内で追加のJSXを処理する方法を見つけることができません。

+0

それは私が考えるちょうど '{this.props.children}' – azium

答えて

0

this.props.childrenをそのまま使用できます。

この特定のデータ構造を処理するには、React.Children utilitiesを使用できます。

例えば

あなたのケースであなただけのカード内のすべての子コンポーネント用のラッピングdiv要素を追加したい場合は、あなたが書くことができます。

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

ラッピングdivにはいくつかの条件に基づいて異なるクラスが含まれていて、カードコンポーネントからロジックを分離したいと思います。 –

+0

次に、Cardコンポーネント内のwrappedChildrenのことを忘れて、単にcontainer-div内のthis.props.childrenに置き換えてください。あなたはあなたの質問に書いたようにコンポーネントをレンダリングすることができます。それでも問題はありますか? –

+0

しかし親の小道具を子供に渡すことに問題があります。 –

0

このような何かを、

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

ですあなたは 'children = {el}'と 'this.props.children'を行うことができます –

関連する問題