免责声明。 当人们在 cmets 中问“到目前为止您尝试过什么?”时,他们只是帮助您解决某些问题,而不是“为您制作”。在盲目询问之前,请务必尝试一下。
您不需要库来制作它(根据您当前版本的问题)。您需要做的就是实现组件的复合模式。很简单的例子:
export class FlowItem extends React.Component {
render() {
const {header, children} = this.props;
return (
<div>
Ping from {header}
<div style={{marginLeft: '20px'}}>
{children}
<div/>
<div/>
);
}
}
下面是示例的用法。
export class Content extends React.Component {
render() {
return (
<div
<FlowItem
header={"Very Top 1"}>
<FlowItem
header={"Parent 1"}>
<FlowItem/>
<FlowItem/>
<FlowItem
header={"Very Top 2"}>
<FlowItem
header={"Parent 1"}>
<FlowItem/>
<FlowItem
header={"Parent 2"}>
<FlowItem header={"Child 1"}/>
<FlowItem header={"Child 2"}/>
<FlowItem/>
<FlowItem
header={"Parent 3"}>
<FlowItem/>
<FlowItem/>
<div/>
);
}
}
另一个简单的示例,如果您想与数组中的真实对象一起使用。我认为这是您的问题:
export class Content extends React.Component {
render() {
const root = {
header: "Root 1",
children: [
{
header: "Parent 1",
children: [
{
header: "Child 1",
children: [
{
header: "Inner 1",
children: null
}
]
},
{
header: "Child 2",
children: null
},
{
header: "Child 3",
children: null
}
]
},
{
header: "Parent 2",
children: [
{
header: "Child 1",
children: null
},
{
header: "Child 2",
children: null
}
]
},
]};
return (
<div>
{this.getItemView(root)}
<div/>
);
}
getItemView = (node) => {
return (
<FlowItem
header={node.header}>
{node.children ?
node.children.map((obj, idx) => {
return (this.getItemView(obj));
}) : <div/>}
<FlowItem/>
);
};
}