У меня есть данные о папках и их подпапках. Моя проблема в том, что я не знаю, как сделать вложенные подпапки, например, у меня есть массив с папками. У меня есть папка «тест», в которой есть множество меток подпапок, и есть папка «daamn», а внутри этой «daamn» есть другие подпапки. Но эти подпапки «daamn» не во втором массиве, а в первом массиве.
[
{
"path": ".TemporaryItems",
"label": ".TemporaryItems",
"rec": false
},
{
"path": "1",
"label": "1",
"rec": false
},
{
"path": "test/",
"label": "test",
"rec": true,
"subDirectories": [
{
"name": "daamn",
"isDir": true,
"isEmpty": false
},
{
"name": "New folder",
"isDir": true,
"isEmpty": true
},
{
"name": "New folder (2)",
"isDir": true,
"isEmpty": true
},
{
"name": "New folder (3)",
"isDir": true,
"isEmpty": true
},
{
"name": "New folder (4)",
"isDir": true,
"isEmpty": true
},
{
"name": "New folder (5)",
"isDir": true,
"isEmpty": true
}
]
},
{
"path": "test/daamn/",
"label": "daamn",
"rec": true,
"subDirectories": [
{
"name": "anotherone",
"isDir": true,
"isEmpty": false
}
]
},
{
"path": "test/daamn/anotherone/",
"label": "anotherone",
"rec": true,
"subDirectories": [
{
"name": "vade",
"isDir": true,
"isEmpty": true
}
]
},
{
"path": "test/daamn/anotherone/vade",
"label": "vade",
"rec": false
},
{
"path": "test/New folder",
"label": "New folder",
"rec": false
},
{
"path": "test/New folder (2)",
"label": "New folder (2)",
"rec": false
},
{
"path": "test/New folder (3)",
"label": "New folder (3)",
"rec": false
},
{
"path": "test/New folder (4)",
"label": "New folder (4)",
"rec": false
},
{
"path": "test/New folder (5)",
"label": "New folder (5)",
"rec": false
}
]Флаг «rec» означает, что есть другие подпапки или нет.
Как и ожидалось, мне нужен DOM (на самом деле просто список с <ul> и <li>). Как-то так, извините за краску 
@bird забыл добавить, простите, один момент, пожалуйста
@ClydeFrog изменил описание
@bird просто список <ul> и <li>
может это поможет вам embed.plnkr.co/4H0hIL
вы пробовали реагировать-UI-дерево. вот ссылка на демо pqx.github.io/react-ui-дерево. Если это ваш желаемый результат, в противном случае вы можете поделиться более подробной информацией.
@MuhammadAbdullahShafiq выглядит так, как я искал, но я не уверен, что строка может быть настраиваемым компонентом React.
@AlexPark, я думаю, вы можете, передав функцию, возвращающую пользовательский элемент React, в renderNode.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я нашел дерево реакции пользовательского интерфейса, в котором вы можете вызвать renderNode, чтобы отобразить пользовательский элемент React.
<Tree
paddingLeft = {20} // left padding for children nodes in pixels
tree = {this.state.tree} // tree object
onChange = {this.handleChangeEvent} // onChange(tree) tree object changed
renderNode = {this.renderNode} // renderNode(node) return react element
/>
Я использую рекурсию для восстановления дерева, тем самым подпапка является дочерней по отношению к родительской папке.
const arr = [
{
"path": ".TemporaryItems",
"label": ".TemporaryItems",
"rec": false
},
{
"path": "1",
"label": "1",
"rec": false
},
{
"path": "test/",
"label": "test",
"rec": true,
"subDirectories": [
{
"name": "daamn",
"isDir": true,
"isEmpty": false
},
{
"name": "New folder",
"isDir": true,
"isEmpty": true
},
{
"name": "New folder (2)",
"isDir": true,
"isEmpty": true
},
{
"name": "New folder (3)",
"isDir": true,
"isEmpty": true
},
{
"name": "New folder (4)",
"isDir": true,
"isEmpty": true
},
{
"name": "New folder (5)",
"isDir": true,
"isEmpty": true
}
]
},
{
"path": "test/daamn/",
"label": "daamn",
"rec": true,
"subDirectories": [
{
"name": "anotherone",
"isDir": true,
"isEmpty": false
}
]
},
{
"path": "test/daamn/anotherone/",
"label": "anotherone",
"rec": true,
"subDirectories": [
{
"name": "vade",
"isDir": true,
"isEmpty": true
}
]
},
{
"path": "test/daamn/anotherone/vade",
"label": "vade",
"rec": false
},
{
"path": "test/New folder",
"label": "New folder",
"rec": false
},
{
"path": "test/New folder (2)",
"label": "New folder (2)",
"rec": false
},
{
"path": "test/New folder (3)",
"label": "New folder (3)",
"rec": false
},
{
"path": "test/New folder (4)",
"label": "New folder (4)",
"rec": false
},
{
"path": "test/New folder (5)",
"label": "New folder (5)",
"rec": false
}
]
const folrLvl = str => str.split('/').filter(e => e !== "").length
function recursion(lvl = 1, path) {
const rs = []
const matched = arr.filter(e =>
folrLvl(e.path) === lvl && (!path || e.path.indexOf(path) === 0))
matched.forEach(ee => {
const { path, rec, label } = ee
if (!rec) rs.push(ee)
else rs.push({path, label, rec, children: recursion(lvl + 1, path)})
})
return rs
}
const rs = recursion()
console.info(rs)
Итак, каков ваш ожидаемый результат?