Почему я не могу сопоставить этот массив объектов, когда он загружен в useState()?

#javascript #node.js #reactjs #react-router

Вопрос:

учусь реагировать, но я пытаюсь отобразить массив объектов в раскрывающемся списке.

Я получаю «Неперехваченную ошибку типа: ids.map не является функцией».

Почему я получаю эту ошибку, когда я установил загруженные идентификаторы, которые я получаю из запроса GET, в setIds useState?

https://jsfiddle.net/4jh9c6dv/53/

Спасибо, что помогли новичку :’)

 function Dropdown ()
{
    const [ids, setIds] = React.useState([]);

 React.useEffect(() => {
    request.get(endpointIds).then((response) => {
      setIds(response.data);
      
      const loadedIds = [];
      
      for (const id in response)
      {
        loadedIds.push({
        id: ids,
        });
      }
      
      setIds(loadedIds);
      
    });
  }, []);
  
  
 const idsList = ids.map((id) => 
 (
        <option>id</option>
 )); 

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

1. Ваш толчок не просто нажимает номер, он нажимает объект с идентификатором ключа, указывающим на объект состояния идентификаторов. Ты уверен, что не хочешь loadedIds.push(id) ? Я не думаю, что это на самом деле добавляет какие-либо загруженные данные в ваше состояние. Попробуйте консоль. регистрируйте свои идентификаторы перед картой.

2. console.log(response.data) также поможет… console.log() отлаживать каждую переменную… console.log это твой друг. 😉

3. @nlta Спасибо, что указали на это. Я на шаг ближе. Где я должен получить значение идентификатора, потому что в настоящее время в моем раскрывающемся списке просто отображается индекс массива jsfiddle.net/ghe8fmcn/44

4. @Trav обычно в HTML-опциях создаются таким образом со значением и читаемым человеком текстом. <option value="machine_readable_id">User facing text</option> Я не уверен, что здесь есть подходящее значение/текст. Это будет зависеть от того, что вы показываете пользователю.

Ответ №1:

Вам не нужно использовать setIds(response.data); . Убери это. response.data это не массив, response.data.ids это. Вот почему вы получаете ошибку.

ИЗМЕНИТЬ : Используйте for of вместо for in .

for of используется для перебора элементов массива/итерируемого объекта. for in используется для перебора индекса.

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

1. Кроме того, loadedIds.push({id: ids}); просто должно быть loadedIds.push({id});

2. @Тушар Шахи Спасибо, что указал на это. Я на шаг ближе. Где я должен брать значение идентификатора, потому что в настоящее время в моем раскрывающемся списке просто отображается индекс массива вместо значения jsfiddle.net/ghe8fmcn/44

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

4. @TusharShahi Спасибо тебе за то, что научил меня JS и кулинарному этикету stackoverfly!

Ответ №2:

ответ.данные должны быть response.data.id вы также забыли фигурные скобки {id}