Данные Nodejs Api не сохраняются в массиве в Reactjs

Я получаю данные из 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;

В идеале вы должны использовать componendDidMount вместо componentWillMount при выполнении любой работы с побочными эффектами ... например, при вызове некоторой асинхронной функции

VISHAL DAGA 26.10.2018 18:28

Я могу получить "тело" вывода из api и отобразить его на консоли с помощью console.info (body). Но когда я назначаю это курсам массива. Это не работает.

Gowtham Velmurugan 26.10.2018 19:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
2
34
1

Ответы 1

Ответ от API должен содержаться в "теле", которое вы возвращаете.

udemyApiClient.get("courses?language=en&price=price-free", function(err, res, body) { 
    if (err) return console.error(err);
    console.info(body) 
});

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

Gowtham Velmurugan 26.10.2018 19:06

Если я использую console.info после if (err) return console.error (err); Я получаю данные тела из API в консоли.

Gowtham Velmurugan 27.10.2018 15:04

Затем вы сможете установить состояние курсов с помощью основных данных, которые вы получаете this.setState ({course: body.data})

Keith Brewster 29.10.2018 15:27

Другие вопросы по теме