React + Axios - возврат карты не является функцией?

Я работаю над своим первым API с React. Я могу в консоли регистрировать мое текущее состояние после его загрузки и установки состояния для этого массива. Однако запуск моего компонента с опорой FragrancesArray, которая устанавливается после загрузки данных из this.state.fragrances, возвращается не как функция.

Использование axios async и await.

Понятия не имею, почему? Может кто поможет?

Спасибо.

Мой код:

// Core React
import React, { Component } from 'react';

// Axios
import axios from 'axios';

// Constants
import { FRAGRANCES_URL, BLOGS_URL, MAKE_UP_URL } from 'constants/import';

// Components
import Fragrances from 'components/Fragrances/Fragrances';

class App extends Component {

  state = {
    fragrances: [],
    blogs: [],
    makeup: []
  }

  getCoffee() {
    return new Promise(resolve => {
      setTimeout(() => resolve('☕'), 0); // it takes 1 seconds to make coffee
    });
  }

  async showData() {
    try {
      // Coffee first
      const coffee = await this.getCoffee();
      console.info(coffee); // ☕

      // Axios API's
      const fragranceData = axios(FRAGRANCES_URL);
      const blogData = axios(BLOGS_URL);
      const makeupData = axios(MAKE_UP_URL);

      // await all three promises to come back and destructure the result into their own variables
      await Promise.all([fragranceData, blogData, makeupData])

      .then((data) => {
        this.setState({
          fragrances: data[0],
          blogs: data[1],
          makeup: data[2]
        });

        const { blogs } = this.state;
        console.info(blogs);
      })

    } catch (e) {
      console.error(e); // ?
    }

  }

  componentDidMount() {
    this.showData();
  }

  render() {
    return (
      <Fragrances FragranceArray = {this.state.fragrances} AppURL = {FRAGRANCES_URL} />
    )
  }
}
export default App;
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
490
1

Ответы 1

В качестве реакции, прежде чем вы сможете установить / использовать состояние, вам необходимо объявить его с помощью getInitialState(), но с моделью класса ES6 вы инициализируете состояние в конструкторе.

class App extends Component {

  constructor(props) {
    super(props)
    //- Initialize default state values
    this.state = {
      fragrances: [],
      blogs: [],
      makeup: []
    }
  }
  
  //The rest of code stays the same.

    render() {
    return (
      <Fragrances FragranceArray = {this.state.fragrances} AppURL = {FRAGRANCES_URL} />
    )
  }
}

Подробнее о состоянии React

при использовании React 16 конструктор больше не нужен, а this.sate можно заменить на state. Но не работает пробовал спасибо.

user10431099 18.12.2018 21:28

Ммм, внутри функции рендеринга можно console.info(this.state.fragrances)? а что на выходе?

ArchNoob 18.12.2018 22:01

Я получаю данные своей коллекции. Однако я заметил, что мой API - это ОБЪЕКТ, а не массив. Я зацикливаюсь с использованием карты вместо объекта. Однако я все еще не могу получить правильные данные внутри объекта. Как я могу преобразовать объект в массив?

user10431099 18.12.2018 22:08

Хорошо, разобрался и решил .. setState должен быть ароматами: data, а не data [0]. Я могу показать данные, однако сейчас у меня возникла небольшая проблема с вложенными массивами. мне нужно использовать "Fragrance.data.entries [index] .name" внутри моей карты, чтобы достичь того, что я хочу. Как можно зациклить карту внутри карты? tnx man

user10431099 18.12.2018 22:51

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