реагировать js :извлекать данные из внутреннего массива и загружать их в состояние

#javascript

Вопрос:

у меня есть api с народами, которые я пытаюсь отобразить имена людей

 "peoples": [
    {
        "id": 2,
        "mainModule": "bonding",
        "description": "some random description 2",

        "persons": [
            {
                "id": 3,
                "name": "hari",
                "completed": false
            },
            {
                "id": 4,
                "name": "meenu",
                "completed": false
            }
        ]


 "id": 1,
        "mainModule": "bonding2",
        "description": "some random description 2",


   "persons": [
            {
                "id": 3,
                "name": "jisa",
                "completed": false
            },
            {
                "id": 4,
                "name": "stepy",
                "completed": false
            }
        ]
    },
]
 

Это мои данные в api

Я использую axios для установки состояния, называемого элементами

  axios
      .get(
        "url",
        config
      )
      .then((res) => {

        console.log(res.data.peoples)//this works
        console.log(res.data.peoples.persons);//here i am getting error
      

        this.setState({ items: res.data.peoples.persons}); error
}
 

Я пытаюсь передать людей, чтобы я мог сопоставить имена людей в JSX

я изменил код, пожалуйста, помогите

Ответ №1:

Добро пожаловать в StackOverflow! Как вы можете видеть в своем первом фрагменте, внутри у вас есть массив peoples , поэтому правильным способом доступа к нему будет:

res.data.peoples[0].persons

Надеюсь, это решит вашу проблему. Вы можете прочитать больше об этом в документах MDN

Редактировать:

Если вы хотите перебрать людей, вы можете сделать это:

 res.data.peoples.map(person => (
  <div key={person.id}>{person.name}</div>
));
 

Помните, что вы должны передать уникальный ключевой реквизит компоненту, чтобы React мог правильно создать и сохранить список. Более подробная информация об этом в Документах.

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

1. что делать у меня есть 100 человек есть ли система, чтобы ее использовать для всех

2. Я отредактировал свой ответ с помощью примера JSX для вас. Дайте мне знать, если это вам поможет 🙂

3. я не в состоянии отобразить прямое разрешение . я должен установить элементы состояния, чтобы отобразить его

Ответ №2:

res.data.peoples является массивом, поэтому вы должны повторить его. У него нет собственности на людей, у него есть [0], [1] и т. Д. Попробуйте войти в res.data.peoples[0].persons

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

1. что делать у меня есть 100 человек есть ли система, чтобы ее использовать для всех

2. Я подозреваю, что вы должны собрать всех людей для всех людей с массивом.уменьшить

Ответ №3:

Из приведенных вами примеров данных видно, что peoples-это массив. Таким образом, чтобы получить доступ к лицам, вы должны иметь возможность получить доступ к нему, используя следующее, например, если вы хотите получить доступ к первому элементу массива:

 res.data.peoples[0].persons
 

В противном случае, если вы хотите получить доступ к нему как к res.data.peoples.persons, вам придется изменить вывод вашего API таким образом, чтобы он выглядел следующим образом :

 "peoples": {
        "id": 2,
        "mainModule": "bonding",
        "description": "some random description 2",

        "persons": [
            {
                "id": 3,
                "name": "hari",
                "completed": false
            },
            {
                "id": 4,
                "name": "meenu",
                "completed": false
            }
        ]
    }