Попробуйте исправить эти строки кода:
constructor(props) { //fixed
super(props); //fixed
this.state ={
data:[],
}
}
Именно так ReactJS настраивает метод constructor()
для class component
.Мы просто соблюдаем правила React при работе с ним.
Из Официального документа React они сказали:
Конструктор для компонента React вызывается раньшеэто установлено.При реализации конструктора для подкласса React.Component вы должны вызывать super (props) перед любым другим оператором.В противном случае this.props будет неопределенным в конструкторе, что может привести к ошибкам.
Для получения дополнительной информации о методе contructor()
: https://reactjs.org/docs/react-component.html#constructor
Это рабочийпример, который я уже сделал только для вас.
Демонстрация теперь доступна на CodeSandBox: https://codesandbox.io/s/8xvn8yl1l2
TitleBar.js
import React, { Component } from 'react';
import axios from 'axios';
export default class TitleBar extends Component {
constructor(props) {
super(props);
this.state = {
data: []
};
}
componentDidMount() {
axios
.get('https://jsonplaceholder.typicode.com/posts')
.then(res => {
console.log(res.data);
this.setState({ data: res.data });
})
.catch(err => console.log(err.message));
}
render() {
return (
<div>
{this.state.data.map(i => (
<div key={i.id}>
<h2>{i.title}</h2>
</div>
))}
</div>
);
}
}
App.js
import React, { Component } from 'react';
import TitleBar from './components/TitleBar';
class App extends Component {
render() {
return (
<div>
<TitleBar></TitleBar>
</div>
);
}
}
export default App;
Следуя этому примеру, если this.state.data
по-прежнему undefine
, то есть две вещи, на которых мы могли бы сосредоточиться для успешной отладки:
1. Структура объекта данных ответа.В вашем случае решение может быть
this.setState({
data: response.data.DATA
})
2. Работает ли API должным образом.
Надеюсь, это поможет.