Проверьте, есть ли у JSON дочерние элементы несколько раз в возврате

Я пытаюсь проверить длину (или существует ли она вообще) дочерних элементов JSON, прежде чем перебирать их. мой пример имеет примечание:

{const itHasChildren = item.child_items.length;}

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

Источник/Компоненты/HeaderComponent/header.js Строка 60:29: 'childItem' не определен no-undef

Найдите ключевые слова, чтобы узнать больше о каждой ошибке.

  return (
    <nav >
    
      <ul className = "navbar-nav">
        {menus &&
          menus.map((item) => (
          
              <li className = "nav-item active" key = {item.ID}>
              
                  <Link >{item.title} </Link>


     // I NEED TO CHECK THE LENGTH  OR IF child_items EXISTS 
     //  HERE SO I CAN DECIDE WHETHER TO DISPLAY THIS DIV OR NOT

              {item.child_items.map((childItem).length)}

              <div className = "dropdown-menu" aria-labelledby = "navbarDropdownMenuLink" >

              {item.child_items &&
                item.child_items.map((childItem) => (
            
                      <Link >{childItem.title} </Link>
                    
                      ))}
                  </div>
            </li>
           
          ))}
      </ul>
 </nav>
  );

Это приведет к синтаксической ошибке, так как это код jsx {item.child_items && item.child_items.map((childItem) => ( <div /> ))} и должен работать внутри компонента или фрагмента <></>

uke 09.12.2020 21:24

не могли бы вы показать мне пример того, как мой код будет работать с фрагментом, я добавил их и все равно получил синтаксические ошибки

Justin Blayney 09.12.2020 21:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я немного подчистил ваш код, так что он должен работать. Только первый элемент внутри карты нуждается в key, и, согласно вашим данным, это может быть позиция индекса в массиве.

  return (
    <nav className = "navbar navbar-expand-lg navbar-light bg-light">
      <button
        className = "navbar-toggler"
        type = "button"
        data-toggle = "collapse"
        data-target = "#navbarNavDropdown"
        aria-controls = "navbarNavDropdown"
        aria-expanded = "false"
        aria-label = "Toggle navigation"
      >
        <span className = "navbar-toggler-icon"></span>
      </button>

      <div className = "collapse navbar-collapse" id = "navbarNavDropdown">
        <ul className = "navbar-nav">
          {(menus || []).map((item, ix) => (
            <li key = {ix} className = "nav-item active">
              <Link
                className = "nav-link"
                to = {{
                  pathname: item.slug,
                  state: {
                    pageId: item.slug
                  }
                }}
              >
                {item.title}
              </Link>

              {(item.child_items || []).map((childItem, ix) => (
                <div key = {ix} className = "dropdown-menu" aria-labelledby = "navbarDropdownMenuLink">
                  <Link
                    className = "dropdown-item"
                    to = {{
                      pathname: childItem.slug,
                      state: {
                        pageId: childItem.slug
                      }
                    }}
                  >
                    {childItem.title}
                  </Link>
                </div>
              ))}
            </li>
          ))}
        </ul>
      </div>
    </nav>
  );

спасибо за помощь .. это не сработало .. я все еще получаю ошибку индекса .. кроме того, в первых классах li и link нет условных операторов

Justin Blayney 09.12.2020 21:38

Я понял ошибку ключа, раскрывающийся элемент div должен находиться за пределами child_items.map... но опять же, как и первый элемент списка и ссылка, я хочу отображать его только в том случае, если есть дочерние элементы. Мне нужно создать что-то, что я могу использовать 3 раза, если child_items отображают это, иначе отображают это

Justin Blayney 09.12.2020 22:22

Итак, вам нужен тест child_items.length

uke 09.12.2020 22:28

Как бы это выглядело? Например, как только я пытаюсь отобразить {item.child_items.length}, я получаю ошибки Uncaught TypeError: item.child_items is undefined и SyntaxError: /Users/justin/Desktop/react-wordpress-headless/src/Component‌ s/HeaderComponent/he‌​ader.js: неожиданный токен, ожидаемый "," (45:8)

Justin Blayney 09.12.2020 22:43
Ответ принят как подходящий

вот синтаксис и условие, которое я искал

<li 
            className = {
                item.child_items
                  ? "nav-item dropdown"
                  : "nav-item  "
              }

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