React - Как отобразить список из ключей массива объектов

Я новичок в 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 задыхается от этого?

Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Слишком много useState? Давайте useReducer!
Слишком много useState? Давайте useReducer!
Современный фронтенд похож на старую добрую веб-разработку, но с одной загвоздкой: страница в браузере так же сложна, как и бэкенд.
Типы данных JavaScript
Типы данных JavaScript
В JavaScript существует несколько типов данных, включая примитивные типы данных и ссылочные типы данных. Вот краткое объяснение различных типов данных...
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик Модуль flexbox, также известный как гибкий модуль разметки box, помогает эффективно проектировать и...
Введение в раздел &quot;Заголовок&quot; в HTML
Введение в раздел "Заголовок" в HTML
Говорят, что лучшее о человеке можно увидеть только изнутри, и это относится и к веб-страницам HTML! Причина, по которой некоторые веб-страницы не...
Как React Helmet спасает меня при разделении файлов CSS?
Как React Helmet спасает меня при разделении файлов CSS?
Многие новички могут столкнуться с проблемой, когда одна страница с CSS наследует свойства от другой страницы с другим CSS. У меня было много проблем,...
0
0
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно вернуть выражения из вашей функции карты.

{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 по умолчанию, если со скобками, если без скобок, оно вернет результат тела функции.

Другие вопросы по теме