2014-09-23 142 views
1

我對reactjs很新的信息(三天,其實)。我想要構建一個組件,根據策略(由組件實施)和某些兒童屬性來佈置子項。一些屬性在創建時直接傳遞給兒童作爲道具;其他一些屬性,如維度,對於每個孩子都是固有的。也就是說,這種佈局組件將被用於像:如何從兒童

<Layout> 
    <Child1 propx=... propy=...>...</Child1> 
    <Child2 propz=...>...</Child2> 
    ... 
</Layout> 

和孩子們的立場將取決於propx,丙基,propz,...,和孩子們的大小。

好,佈局組件需要知道它的孩子們的道具和它們的大小的值。起初,我給孩子班級的方法「的GetProperties」返回相關的屬性和我在React.Children.forEach(this.props.children,FN)調用的方法,但是我發現,傳遞給FN的對象不是組件實例,所以我無法調用它的getProperties。然後我試圖通過每個佈局的孩子額外的屬性「uploadProperties」有回調被稱爲由孩子告訴它需要知道的佈局。我知道我不能叫setProps的孩子,所以我想出了這個:

var Layout = React.createClass({ 
    storeChildProperties: function (properties) { 
     this.childData = this.childData || []; 
     this.childData.push(properties); 
    }, 
    render: function() { 
     var self = this; 
     var children = []; 
     React.Children.forEach(this.props.children, function (child) { 
      var clone = React.addons.cloneWithProps(
       child, 
       {key: child.props.key, uploadProperties: self.storeChildProperties}); 
      children.push(clone); 
     }); 
     this.props.children = children; 
     return <div>{this.props.children}</div>; 
    } 
} 

看來工作,但我覺得不安兩件事情。首先,我不喜歡安裝「childData」的佈局實例(我不知道還有什麼地方把它)。其次,我不知道替換this.props.children是否可以。其實,它即使我沒有,我只是

return <div>{children}</div>; 

無論如何,這是一個合理的方式來從兒童獲得信息?

回答

3

您可以通過訪問this.props.children[0].props孩子們的道具。