У меня есть объект, подобный этому:
{
id: number,
kids: [{
id: number,
kids: [{
id: number,
kids: []
}]
}]
}
Таким образом, у него есть свойство kids, которое представляет собой массив дочерних элементов, каждый из которых может иметь свой собственный массив дочерних элементов. Мне нужно отобразить исходный объект в древовидном списке следующим образом:
<ul>
{object.map(item => (
<li>
<p>{item.value}</p>
{item.kids ?
{item.kids.map(item => (
<ul>
<li>
<p>{item.value}</p>
</li>
</ul>
))}
: null
}
</li>
))}
</ul>
Таким образом, каждый элемент kids будет элементом <li></li>
с <ul></ul>
внутри него, если item.kids не является пустым массивом.
Я мог бы продолжать в том же духе, но это довольно грязно, и, что более важно, я не знаю, когда именно свойство kids станет пустым массивом. Поэтому мне нужно как-то перебрать исходный объект и его свойства и сделать что-то вроде
while (kid.kids) {
return {kid.kids.map(kid => (
<li>
<p>{kid.value}</p>
<ul>
kid.kids.map(kid => (
etc
))
</ul>
</li>
}))
}
Но я не могу понять, как лучше зациклиться на этом.
Вероятно, это лучше всего решается с помощью рекурсии.
const Kids = ({id, kids}) => {
return {
<li key = {id}>
<p>{id}</p>
{kids
? (<ul>{kids.map((kid) => <Kids id = {kid.id} kids = {kid.kids} />)}</ul>)
: null;
}
</li>
}
};
Не могли бы вы нарисовать картинку, чтобы лучше описать ожидаемый результат? Спасибо! Также рекомендую прочитать Как правильно задать вопрос и отправиться на тур! Эти статьи помогут вам получить лучшие ответы!