Как мне отобразить весь массив, содержащий другие объекты и массивы, а также в React?

#javascript #html #arrays #reactjs #json

Вопрос:

Я создал массив JavaScript, содержащий некоторые другие объекты. подобъекты содержат массивы. Теперь я хочу повторить весь родительский объект в React. Я использую следующий подход, но он не работает:

Массив

 const users =[  {  id:1,  username: "user1",  path: "/user",  listItems: {lists:["list-1", "List-2", "List-3", "List-4", "List-5"], path: ["/list-1", "/List-2", "/List-3", "/List-4", "/List-5"]}  },  {  id:2,  username: "user2",  path: "/user2",  listItems: {lists:["list-1", "List-2", "List-3", "List-4", "List-5"], path: ["/list-1", "/List-2", "/List-3", "/List-4", "/List-5"]}  },  {  id:3,  username: "user3",  path: "/user3",  listItems: {lists:["list-1", "List-2", "List-3", "List-4", "List-5"], path: ["/list-1", "/List-2", "/List-3", "/List-4", "/List-5"]}  } ]  

Компонент usersInfo

 export default function usersInfo(props){ const users = props.users; return( lt;div className="container"gt; {users.map((item)=gt;{  return(  lt;section className="user"gt;  lt;h1gt;{item.username}lt;/h1gt;  lt;pgt;{item.path}lt;/pgt;  lt;Link href={item.path}gt;Visitlt;/Linkgt;  lt;pgt;Users listslt;/pgt;  lt;ulgt;  {item.listItems.map((topic)=gt;{  lt;Link href={topic.path}lt;ligt;{topic.lists}lt;/ligt;  })}  lt;/ulgt;  lt;/sectiongt;  )})}  lt;/divgt; )}  

Использование usersInfo сопонента в React:

 lt;usersInfo users = {users}/gt;  

Все работает нормально. Но у меня возникает проблема при попытке отобразить listItems объект, который содержит два массива lists и path . Как мне решить эту проблему?

Я ожидаю такой результат:

введите описание изображения здесь

Ответ №1:

ты скучаешь по этому,

замените это, это неправильно .map() здесь не будет работать, так как listItems его объект json, вам нужно изменить этот код,

 lt;ulgt;  {item.listItems.map((topic)=gt;{  lt;Link href={topic.path}lt;ligt;{topic.lists}lt;/ligt;  })}  lt;/ulgt;  

замените на это, это будет работать

 lt;ulgt; {  item.listItems.lists.map((list)=gt;{  lt;ligt;{list}lt;/ligt;  })  item.listItems.path.map((topic)=gt;{  lt;Link href={topic.path}lt;ligt;{topic.lists}lt;/ligt;  }) } lt;/ulgt;  

Ответ №2:

Вы пытаетесь использовать метод карты для объекта. карта является методом массива и недоступна для объекта. Object.keys.map должен решить эту проблему.

 export default function usersInfo(props){ const users = props.users; return( lt;div className="container"gt; {users.map((item)=gt;{  return(  lt;section className="user"gt;  lt;h1gt;{item.username}lt;/h1gt;  lt;pgt;{item.path}lt;/pgt;  lt;Link href={item.path}gt;Visitlt;/Linkgt;  lt;pgt;Users listslt;/pgt;  lt;ulgt;  {Object.keys(item.listItems)[0].map((list, i)=gt;{    lt;Link href={item.listItems.path[i]}lt;ligt;{list}lt;/ligt;  })}  lt;/ulgt;  lt;/sectiongt;  )})}  lt;/divgt; )}  

Комментарии:

1. Никакой ошибки. Но ничего не произошло! lists не отображается в браузере.

Ответ №3:

Если гарантируется, что lists и paths индексы совпадают, и вы хотите, чтобы ваши lt;ligt; элементы содержали ссылки, вы можете просто сделать:

 lt;ulgt;  {item.listItems.lists.map((listItem, listIndex)=gt;{  return(lt;ligt;lt;Link href={item.listItems.path[listIndex]}gt;{listItem}lt;/Linkgt;lt;/ligt;);  })} lt;/ulgt;  

Комментарии:

1. У меня ошибка с вашим кодом. Ошибка заключается в следующем: **Ошибка типа: ** item.listItems.map is not a function

2. Теперь ошибки нет. Но lists они не отображаются в браузере.

3. Пожалуйста, позвольте мне сказать вам, что этот код отлично работает {item.listItems.map((topic) =gt; (lt;ligt;{topic}lt;/ligt;))} , если у меня внутри объекта только один массив. Например listItems: ["list-1", "List-2", "List-3", "List-4", "List-5"] .Но когда я создаю listItems объект, подобный которому содержит два массива lists , и path такой, как этот listItems: {lists:["list-1", "List-2", "List-3", "List-4", "List-5"], path: ["/list-1", "/List-2", "/List-3", "/List-4", "/List-5"]} , я получаю ошибку!

4. Каково на самом деле ожидаемое поведение? Вы хотите, чтобы каждый list элемент отображался отдельно с соответствующим path элементом?

5. Я отредактировал вопрос и прикрепил ожидаемый вывод HTML в виде изображения.