Создать диаграмму, используя Reactjs Chartjs и axios - PullRequest
0 голосов
/ 02 декабря 2018

Привет. Я использую Reactjs с Chartjs для создания динамических диаграмм.

Я получаю сообщение об ошибке при построении данных json из ответа API.Компонент Chart рендерится, когда я добавляю жестко закодированные данные, такие как label ["a", "b", "c"] и data [3424,34324,34234], но не рендерится, когда я использую загрузку данных из ответа API.

import React, { Component } from 'react';
import './App.css';
import axios from 'axios'
import Chart from './components/Chart';

class App extends Component {
  constructor(){
    super();
    this.state = {
      chartData:{}
    }
  }

  componentDidMount() {
    this.getChartData();
  }

  getChartData() {
    axios.get("http://www.json-generator.com/api/json/get/coXIyroYAy?indent=2").then(res => {
        const coin = res.data;
        let labels = [];
        let data = [];
        coin.forEach(element => {
        labels.push(element.labels);
        data.push(element.data);

          });

       console.log(coin)
        this.setState({
          chartData: {
            labels:labels,
            datasets: [
              {
                label: "Population",
                data: data,
                backgroundColor: [
                  "rgba(255, 99, 132, 0.6)",
                  "rgba(54, 162, 235, 0.6)",
                  "rgba(255, 99, 132, 0.6)"
                ],
              }
            ]
          }
        });
      });
    }

  render(){

        return (
          <div className="App">
          {Object.keys(this.state.chartData).length &&
            <Chart
              chartData={this.state.chartData}
              location="Massachusetts"
              legendPosition="bottom"
            />
          }
          </div>
        );

    }     
}

export default App;

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

это работа мои ошибки в JSON enter code here

 getChartData() {
    axios.get("http://www.json-generator.com/api/json/get/cghIWRNGEO?indent=2").then(res => {
        const coin = res.data;
        let labels = coin.chartData.labels;
        let data = coin.chartData.datasets.data;
        // console.log(data.Object.values(data)[0])
        // data.forEach(element => {
        // data.push(element.data);
        //   });

        this.setState({
          chartData: {
            labels:labels,
            datasets: [
              {
                label: "Population",
                data: data,
                backgroundColor: [
                  "rgba(255, 99, 132, 0.6)",
                  "rgba(54, 162, 235, 0.6)",
                  "rgba(255, 99, 132, 0.6)"
                ],
              }
            ]
          }
        });
      });
    }
0 голосов
/ 02 декабря 2018

Вам нужно сделать две корректировки в вашем коде.

1.Загрузить данные в componentDidMount

Измените эту строку

componentWillMount = () => this.getChartData();

на

componentDidMount() {
  this.getChartData();
}

Вам необходимо загрузить данные, когда компонент смонтирован на DOM.

2.Визуализируйте только когда у вас есть данные диаграммы

Условно визуализируйте Chart компонент.

render() {
  return (
    <div className="App">
      {Object.keys(this.state.chartData).length &&
        <Chart
          chartData={this.state.chartData}
          location="Massachusetts"
          legendPosition="bottom"
        />
       }
    </div>
  );
}

Вы должны отобразить Chart только после заполнения chartData из ответа API.

...