Отображение через массив с JSX - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь map через вложенный Array, используя JSX.

Вот это Array:

    this.topics = [

        {
            id: 1,
            name: 'first',
            headings : [
                {
                    id: 1,
                    url: 'https://media.w3.org/2010/05/sintel/trailer.mp4',
                    name: 'Sintel movie'
                },
                {
                    id: 2,
                    url: 'https://media.w3.org/2010/05/bunny/movie.mp4',
                    name: 'Bunny Movie'
                },
                {
                    id: 3,
                    url: 'https://techslides.com/demos/sample-videos/small.mp4',
                    name: 'Test page'
                }
            ]
        },

        {
            id: 2,
            name: 'second',
            headings : [
                {
                    id: 1,
                    url: 'https://media.w3.org/2010/05/sintel/trailer.mp4',
                    name: 'Siddntel movie'
                },
                {
                    id: 2,
                    url: 'https://media.w3.org/2010/05/bunny/movie.mp4',
                    name: 'Bunnddy Movie'
                },
                {
                    id: 3,
                    url: 'https://techslides.com/demos/sample-videos/small.mp4',
                    name: 'Test ddpage'
                }
            ]
        }
    ];

И код JSX, который я до сих пор придумал:

  renderSidenav(){
      return(
          <Nav>
              {this.topics.map(topic =>
                  <Dropdown eventKey="3" title="s" icon={<Icon icon="magic" />}>
                      {this.topics[topic].headings.map(heading =>
                          <div onClick = {() => this.handleSelect(heading.id)} key={heading.id}>
                              <Dropdown.Item style={{backgroundColor: '#E9F4E4'}} icon={<Icon icon="dashboard"/>}>
                                  <div>{heading.name}</div>
                              </Dropdown.Item>
                              <Dropdown.Item divider style={{backgroundColor: 'white', height: '2px'}}/>
                          </div>
                    )}
                  </Dropdown>
                )}
         </Nav>
      )
  }

И вот ошибка, которую я получаю:

TypeError: Cannot read property 'headings' of undefined

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Вместо this.topics[topic].headings.map(...) используйте topic.headings.map(...)

Это потому, что .map() возвращает объект, и попытка использовать его в качестве индекса через topics[topic] даст вам undefined.

1 голос
/ 25 марта 2019

Просто сделайте topic.headings.map вместо this.topics[topic].headings.map.

Функция карты возвращает элемент, а не позицию / индекс в массиве, поэтому вы можете вызвать его непосредственно из topic.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...