Реагируйте - Как установитьState для различных массивов данных .map? - PullRequest
0 голосов
/ 24 декабря 2018

Я создаю свое приложение.Но у меня есть одна проблема: невозможно использовать setState для нескольких вызовов API с помощью Axios.

У меня есть 2 разных URL-адреса: один для Fragrances и один для Cosmetics.

Первый используется для работы, когда я устанавливаюState при загрузке в массив fragrances.

Когда я пытаюсьиспользуйте еще один API-вызов для косметики, который сейчас говорит, что Fragrances не является массивом.

Как я могу просмотреть несколько различных API-категорий и как я могу установить состояние для каждого из этих массивов (данных)?Что я здесь не так делаю?

За этим следует мой код.

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

// Axios
import axios from 'axios';

// Constants
import { FRAGRANCES_URL, COSMETICS_URL } from 'constants/import';

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

class App extends Component {

  state = {
    fragrances: [],
    cosmetics: []
  }

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

  async showData() {
    try {
    const coffee = await this.getCoffee();
    const fragranceData = axios(FRAGRANCES_URL);
    const cosmeticsData = axios(COSMETICS_URL);

    console.log(coffee); // ☕

    await Promise.all([fragranceData, cosmeticsData]).then((data) => {
      this.setState({
        fragrances: data[0],
        cosmetics: data[1]
      })
    })
    } catch (e) {
     console.error(e); // ?
    }
  }

  componentDidMount() {
    this.showData();
  }

  render() {
    return (
      <React.Fragment>
        <Fragrances FragranceArray={this.state.fragrances} AppURL={FRAGRANCES_URL} />
        <Cosmetics CosmeticsArray={this.state.cosmetics} AppURL={COSMETICS_URL} />
      </React.Fragment>
    )
  }
}
export default App;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...