我對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>;
無論如何,這是一個合理的方式來從兒童獲得信息?