Я новичок в React, но не в Javascript.
У меня есть JSON, который выглядит так:
[
{ "Environments": ["DEV", "QA", "PROD"] },
{ "Products": ["Product A", "Product B", "Product C"] },
{ "Releases": [1,2,5] }
]
Я хочу отобразить список в списке HTML следующим образом:
<ul>
<li>Environments</li>
<li>Products</li>
<li>Releases</li>
</ul>
Я использую следующий (уродливый) Javascript для перебора списка для получения ключей:
var topics = [
{ "Environments": ["DEV", "QA", "PROD"] },
{ "Products": ["Product A", "Product B", "Product C"] },
{ "Releases": [1,2,5] },
]
topics.map(topic => {
Object.entries(topic).map( ([key, values]) => {
console.info(key);
console.info(values);
})
})
Но когда я пытаюсь применить его в реагирующем компоненте, я ничего не получаю, никакой ошибки.
export default function()
{
const topics = //...topics from json
return (
<>
<h1>Topics</h1>
<ul>
{topics.map(topic => { Object.entries(topic).map( ([key, values]) => {
<li>key: {key}</li>
})})}
</ul>
</>
)
}
Вероятно, есть (должен быть) более простой способ представления данных, которые мне нужны, но почему React задыхается от этого?
Вам нужно вернуть выражения из вашей функции карты.
{topics.map(topic => { return Object.entries(topic).map(([key, values]) => {
return <li>key: {key}</li>
})})}
Или используйте неявный возврат, удалив скобки.
{
topics.map(topic => {//with return and brackets
return Object.entries(topic).map(([key, values]) => {
return <li>key: {key}</li>
})
})
}
{
topics.map(topic =>
Object.entries(topic).map(([key, values]) =>
<li>key: {key}</li>
)
)
}
В javascript тело функции будет возвращать undefined по умолчанию, если со скобками, если без скобок, оно вернет результат тела функции.