@tj57

Как правильно рендерить массивы с вложенными объектами в React?

Я получаю с сервера массив объектов. Он представляет информацию о здании: есть 2 здания (buildings), в первом есть 2 этажа (rooms), на 2 этаже есть 2 крыла, в каждом массиве rooms лежат непосредственно объекты комнат. Во 2ом здании просто 4 комнаты. Выглядит это так:
1) Здания
5c87b0af5a09e246245331.png
2) Этажи
5c87b0ccd2878542979880.png
3) Комнаты
5c87b0dd6e74f951651974.png

Задача - срендерить дерево такого вида:
5c87b17120334577749594.jpeg
Я дошёл до такого состояния:
5c87b1868832e526636483.jpeg

Проблема возникла с тем, как рендерить объекты комнат (самые вложенные). Я с помощью .map() прохожу по массиву объектов, но получаю ошибку:
5c87b22d4c2e2553234454.jpeg

Код:
import React from 'react';
  import ReactDOM from 'react-dom';

  class Tree extends React.Component {
    constructor(props) {
      super(props);
      this.state = {
        buildings: []
      }
    }

    componentDidMount() {
      var buildings = new Scorocode.Query("buildings");
        buildings.find().then((finded) => {
        let buildings = finded.result;
        this.setState({buildings: buildings});

        console.info(buildings);
      });
    }

    render() {
     return (
       <div id="multi-derevo">
        <h4><a href="#">Начальная схема</a></h4>
        <ul>
          {this.state.buildings.map((building, name) => (
            <li key={this.state.buildings.name}><span><a>{building.name}</a></span>
              <ul>
                {building.rooms.map((room, index) => (
                  <li key={building.rooms.name}><span><a>{room.name}</a></span>
                    <ul>
                      {room.map((item, i) => (
                        <li key={i}><span><a>{item.name}</a></span></li>
                      ))}
                    </ul>
                  </li>
                ))}
              </ul>
            </li>
            ))}
        </ul>
       </div>
     );
   }
}
export default Tree;


Не судите строго, с React знаком совсем недавно.
  • Вопрос задан
  • 3830 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
Kublyakov
@Kublyakov
У вас type error, которая к реакту отношения не имеет.
Вместо room.map попробуйте room.children.map
потому что room это объект, а не массив.
Ну а в целом код выглядит рабочим.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы