Я получаю данные из udemy api с помощью функции. я не могу сохранить вывод этой функции в массив
Вот полный код. Я хотел назначить данные api массиву курсов, определенному в react.
.then(response => {
this.setState({ courses: response.data }, () => {});
});
Думаю, я не могу использовать .then в импортированной функции udemy-api, написанной на nodejs? Он говорит, что ответ не определен по ошибке. Пожалуйста, помогите. Только начал изучать reactjs.
Я использовал этот udemy-api nodejs из github https://github.com/monatis/udemy-api
import React, { Component } from "react";
import "./App.css";
class App extends Component {
constructor() {
super();
this.state = {
courses: []
};
}
componentWillMount() {
this.getCourses();
}
getCourses() {
const Udemy = require("udemy-api");
let udemyApiClient = new Udemy(
"client",
"secret"
);
udemyApiClient.get("courses?language=en&price=price-free", function(
err,
res,
body
) {
if (err) return console.error(err);
.then(response => {
this.setState({ courses: response.data }, () => {});
}); // this is not working i want to assign the api data i get to courses array
});
}
render() {
const coursesItems = this.state.courses.map((courses, i) => {
return <li>{courses.title}</li>;
});
return (
<div>
<h1>Courses</h1>
<ul>{coursesItems}</ul>
</div>
);
}
}
export default App;
Я могу получить "тело" вывода из api и отобразить его на консоли с помощью console.info (body). Но когда я назначаю это курсам массива. Это не работает.





Ответ от API должен содержаться в "теле", которое вы возвращаете.
udemyApiClient.get("courses?language=en&price=price-free", function(err, res, body) {
if (err) return console.error(err);
console.info(body)
});
Да, я получаю ответ тела, и я вижу это в консоли элемента проверки. Но я не могу назначить этот вывод массиву курсов. Это моя проблема. Я пробовал использовать .then.
Если я использую console.info после if (err) return console.error (err); Я получаю данные тела из API в консоли.
Затем вы сможете установить состояние курсов с помощью основных данных, которые вы получаете this.setState ({course: body.data})
В идеале вы должны использовать componendDidMount вместо componentWillMount при выполнении любой работы с побочными эффектами ... например, при вызове некоторой асинхронной функции