I am making a treeview from JSON using react. So far I have made a collapsible tree using this example data:
var data = { title: "Node 1", childNodes: [ {title: "Childnode 1.1"}, {title: "Childnode 1.2", childNodes: [ {title: "Childnode 1.2.1", childNodes: [ {title: "Childnode 1.2.1.1"} ]}, {title: "Childnode 1.2.2"} ]} ] };
But this is one object. I want to get JSON array of objects as input and generate treeview from that but I am unable to understand where to change the code.
Here’s my render function:
render() { var childNodes; if (this.props.node.childNodes != null) { childNodes = this.props.node.childNodes.map(function (node, index) { return <li key={index}><Treeview node={node}/></li> }); } return ( <form> <div> <input type="checkbox"/> <label for>{this.props.node.title}</label> </div> <ul> {childNodes} </ul> </form> ); }
How can I change the code to work with the whole array and not just one object?
Advertisement
Answer
Recursion is fun!
const data = [{ title: "Node 1", childNodes: [ { title: "Childnode 1.1" }, { title: "Childnode 1.2", childNodes: [ { title: "Childnode 1.2.1", childNodes: [ { title: "Childnode 1.2.1.1" } ] }, { title: "Childnode 1.2.2" } ] } ] }]; const App = () => ( <form> <Tree data={data} /> </form> ); const Tree = ({data}) => ( <ul> {data && data.map(item => ( <li> {item.title} {item.childNodes && <Tree data={item.childNodes} />} </li> ))} </ul> );