Ни <ol>
, ни </ol>
не являются действительными JSX, поэтому ваш текущий код не работает.
Я бы посоветовал изменить вашу структуру данных так, чтобы вы не полагались на 1
и -1
, чтобы сообщать вам, когда повышаться или понижаться на уровне вложения. Примерно так было бы легче работать:
const linkArray = ['value', 'another value', ['third value'], 'fourth value']
Таким образом, ваша структура данных будет иметь ту же форму, что и желаемый вывод.
Здесь мы можем определить рекурсивную функцию, которая будет отображать новый элемент <li>
при обнаружении строки и новый элемент <ol>
при обнаружении массива:
const nestedList = link => {
if (link instanceof Array) {
return <ol>{link.map(nestedList)}</ol>;
} else {
return <li>{link}</li>;
}
}
Затем верните следующее в методе рендеринга вашего основного компонента (вызов функции, которую мы только что определили, обернутый во внешний набор тегов <ol>
):
<ol>{linkArray.map(nestedList)}</ol>
Отображается следующий HTML-код:
<ol>
<li>value</li>
<li>another value</li>
<ol>
<li>third value</li>
</ol>
<li>fourth value</li>
</ol>
Какой желаемый результат (за исключением тегов <SomeComponent>
, которые я оставил для простоты - они не влияют на логику).