#reactjs #function #frontend
Вопрос:
у меня есть много категорий в компоненте, и я хочу отобразить одну конкретную категорию в другом компоненте, используя его идентификатор . я использую axios и получаю данные, которые ищу, как показано на рисунке
но проблема в том, что когда я хочу использовать карту для отображения данных, я получаю следующую ошибку : this.state.category.map не является функцией
вот мой код :
import React, { Component } from 'react';
import axios from 'axios';
class SingleCategory extends Component {
constructor(props) {
super(props);
this.state={
category:[]
}
}
componentDidMount() {
axios.get('http://127.0.0.1:8000/api/show/' this.props.match.params.id)
.then(response=>{
this.setState({category:response.data});
console.log(this.state.category)
})
}
render() {
return (
<div className="w-2/3 bg-red-100 h-60 m-auto mt-10">
{
this.state.category.map(cat=> {
return(
<div>{cat.id}</div>
)
})
}
</div>
);
}
}
export default SingleCategory;
Комментарии:
1. Пожалуйста, добавьте результат
console.log(response.data)
2. Кроме того, я не думаю
console.log(this.state.category)
, что у вас будет правильное время, он должен ждать реакции, чтобы отметить изменение состояния.3. Зарегистрированные данные показывают обычный объект, а не массив.
4. @Chaker.asm да, но у простых объектов нет
.map
метода. Так что вместоthis.state.category.map
этого вам, вероятно, следует просто напрямую использовать<div>{this.state.category.id}</div>
5. @GabrielePetrioli Да , это отлично работает, спасибо, приятель !
Ответ №1:
Таким образом, проблема заключалась в том, что простые объекты не имеют метода .map. Вместо того, чтобы использовать эту карту.состояние.категория.. просто напрямую используйте
<div>{this.state.category.id}</div>
Ответ №2:
Согласно вашему комментарию, результатом API является объект, а не объект array
. Поэтому map
не могу вызывать Объекты.
Ответ №3:
В соответствии с примером объекта resp.data, похоже, что вы получаете объект не в списке из api. Карта работает только со списком.