#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}