使用React 0.12.2并给出一个布局组件,例如:托盘:
<div className="tray">
<div className="tray__item tray__item--left" data-width="260px">
Load a component in the left tray
</div>
<div className="tray__item tray__item--center">
Load a component in the center tray
</div>
<div className="tray__item tray__item--right" data-width="100%">
Load a component in the right tray
</div>
</div>
我希望能够将任意组件插入到每个内容中,并将它们作为args传递给此组件。
也许是这样的:
<Tray left={Component1} center={Component2} right={Component3}/>
我还想知道如何传递未知数量的组件,例如:
<Carousel items={Component1,Component2,Component3,Component4}/>
为了清楚起见 - 这些容器组件是“愚蠢的”#34; - 他们只关心滑动内容 - 你应该能够传递你想要的任何内容(组件)。
我该怎么做才能渲染它们?感谢。
答案 0 :(得分:2)
在Tray的渲染方法中,你可以做到
render: function() {
return (
<div className="tray">
{this.props.children}
</div>
);
}
然后在托盘所在的组件中,你可以做到
<Tray>
<TrayItem position="left"/>
<TrayItem position="center"/>
<TrayItem position="right"/>
</Tray>
你应该能够保持这种模式的嵌套,即
<Tray>
<TrayItem position="left">
<SomeComponent/>
</TrayItem>
<TrayItem position="center">
<div>
<AnotherComponent/>
</div>
</TrayItem>
<TrayItem position="right"/>
</Tray>
在这种情况下,TrayItem的渲染还应包括{this.props.children}
一般原则是,只要容器组件的渲染包含{this.props.children}
,您就可以将任意组件放在其他组件中。
答案 1 :(得分:2)
感谢Adam Stone + SimpleJ的答案。
var Tray = React.createClass({
render: function () {
return (
<div className="tray">
{this.props.children}
</div>
);
}
});
var TrayItem = React.createClass({
render: function () {
return (
<div className="tray__item">
{this.props.children}
</div>
);
}
});
<Tray>
<TrayItem>
<ComponentA/>
<ComponentAB/>
</TrayItem>
<TrayItem>
<ComponentB/>
</TrayItem>
<TrayItem>
<ComponentC/>
</TrayItem>
</Tray>
答案 2 :(得分:-1)
您应该只在其渲染功能中创建一个包含多个子组件的容器组件。您永远不想将组件作为prop
传递