我正在尝试为React开发一个通用容器,它的工作原理是这样的:
<PanelContainer>
<PanelConsole />
<PanelMemory />
<PanelLog />
</PanelContainer>我想在容器中动态创建一个tab系统,它的工作原理如下:
renderTabs = () => {
return (
<ul className="panel_tabs">
{React.Children.map(this.props.children, (child, i) =>
<li key={child.type.display_name} onClick={() => this.handleClickTab(i)}>
{child.type.display_name}
</li>
)}
</ul>
);
}这允许我在类中使用display_name属性呈现选项卡。到目前为止,这是有效的,但现在我正在尝试让点击工作。我想让它动态工作,这样我就不必为面板的每个实例构建专门的容器。理想情况下,我希望在this.props.children中通过索引设置子级的属性,例如:
this.props.children[0].props.shown = false;这个是可能的吗?
发布于 2018-08-06 11:50:16
我认为React.Children.map和React.cloneElement适合您:
render() {
const { children } = this.props;
const tabs = this._renderTabs();
const childrenWithProps = React.Children.map(children, (child, id) =>
React.cloneElement(child, { shown: this.state.shows[i] }));
return (
<div>
<div>{tabs}</div>
<div>{childrenWithProps}</div>
</div>
)
}https://stackoverflow.com/questions/51699541
复制相似问题