### TreeView Renders a tree view of a JSON object or array with collapsible content. Use object destructuring to set defaults for certain props. Use the value of the `toggled` prop to determine the initial state of the content (collapsed/expanded). Use the `setState()` hook to create the `isToggled` state variable and give it the value of the `toggled` prop initially. Return a `
` to wrap the contents of the component and the `` element, used to alter the component's `isToggled` state. Determine the appearance of the component, based on `isParentToggled`, `isToggled`, `name` and `Array.isArray()` on `data`. For each child in `data`, determine if it is an object or array and recursively render a sub-tree. Otherwise, render a `

` element with the appropriate style. ```css .tree-element { margin: 0; position: relative; } div.tree-element:before { content: ''; position: absolute; top: 24px; left: 1px; height: calc(100% - 48px); border-left: 1px solid gray; } .toggler { position: absolute; top: 10px; left: 0px; width: 0; height: 0; border-top: 4px solid transparent; border-bottom: 4px solid transparent; border-left: 5px solid gray; cursor: pointer; } .toggler.closed { transform: rotate(90deg); } .collapsed { display: none; } ``` ```jsx function TreeView({ data, toggled = true, name = null, isLast = true, isChildElement = false, isParentToggled = true }) { const [isToggled, setIsToggled] = React.useState(toggled); return (

setIsToggled(!isToggled)} /> {name ?   {name}: :   } {Array.isArray(data) ? "[" : "{"} {!isToggled && "..."} {Object.keys(data).map( (v, i, a) => typeof data[v] == "object" ? ( ) : (

{Array.isArray(data) ? "" : {v}: } {data[v]} {i === a.length - 1 ? "" : ","}

) )} {Array.isArray(data) ? "]" : "}"} {!isLast ? "," : ""}
); } ``` ```jsx let data = { lorem: { ipsum: "dolor sit", amet: { consectetur: "adipiscing", elit: [ "duis", "vitae", { semper: "orci" }, { est: "sed ornare" }, "etiam", ["laoreet", "tincidunt"], ["vestibulum", "ante"] ] }, ipsum: "primis" } }; ReactDOM.render(, document.getElementById("root")); ```