如何使用API数据正确更新React&Chart.js应用中的图表

DRD

我正在从API接收数据,我想获取该数据并将其填充到我的图表中。我可以看到在哪里调用了API数据并将其传递到setState中,但是似乎无法正确获取此数据并将其传递到图表中。

我尝试使用Chart.js的destroy()和update()方法无效。我确定这只是我在应用程序中未正确使用它们的问题。下面的代码不包含那些方法,因为我不确定在哪里使用它们。我也尝试过将API数据推入图表的数据数组中,但没有走运。

componentDidMount() {
// create chart 
          new Chart(myChartRef, {
      type: "line",
      data: {
        labels: ["Jan", "Feb", "March"],
        datasets: [
          {
            data: this.state.chartData,
            backgroundColor: gradient,
            pointBackgroundColor: "#fff",
            pointBorderColor: gradient,
            pointRadius: "5",
            hoverBackgroundColor: "#75C6FF",
            hoverBorderColor: gradient
          }
        ]
      },
      options: {
        responsive: true,
        legend: {
          display: false
        },
        scales: {
          xAxes: [
            {
              gridLines: {
                color: "#535356"
              },
              ticks: {
                fontColor: "#87889C"
              }
            }
          ],
          yAxes: [
            {
              gridLines: {
                color: "#535356"
              },
              ticks: {
                fontColor: "#87889C"
              }
            }
          ]
        }
      }
    });
/* fetch API data and use it to set app state (setState) */
    const getChartData = () => {
      fetch(
        "https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH&tsyms=USD"
      )
        .then(response => {
          return response.json();
        })
        .then(myJson => {
          const bitcoinPrice = myJson.BTC.USD;
          this.setState({ chartData: bitcoinPrice });
          console.log(JSON.stringify(myJson));
        });
    };

    getChartData();
}

在代码中,一旦安装了组件,便创建了一个新图表。然后,我调用API并接收要显示在图表上的数据。我可以在React开发工具中看到状态已在我的应用程序中设置,但图表未更新。我认为我需要做一些类似的事情,例如将API数据映射到图表中的数据数组中,但是我不确定如何正确执行此操作,因此我对SO或在线其他任何地方建议的其他解决方案都不满意。

这是我的第一个React应用程序,所以不确定在React或Chart.js中是否做错了什么?

尊敬

根据我的经验,您可以将图表组件和图表容器分开。在图表容器中进行获取,并将获取的数据作为道具传递给图表组件,以更好地组织代码。

另外,您还需要检查图表组件内部的componentWillReceiveProps生命周期方法是否更改了道具,并相应地更新了图表

  1. 创建一个名为ChartContainer.js的组件,并将chartData作为道具传递给ChartComponent
import React, { Component } from 'react';
import ChartComponent from './ChartComponent'

export class ChartContainer extends Component {

  constructor(props) {
    super(props);
    this.state = {
      chartData: []
    }

  componentDidMount() {
    fetch(
        "https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH&tsyms=USD"
      )
        .then(response => {
          return response.json();
        })
        .then(myJson => {
          const bitcoinPrice = myJson.BTC.USD;
          this.setState({ chartData: bitcoinPrice });
          console.log(JSON.stringify(myJson));
        });
  }

  render() {
    const { chartData } = this.state;
    return (
        <ChartComponent chartData={chartData}/ >
    );
  }

}
  1. 创建一个名为ChartComponent的组件并获取chartData作为道具。还创建一个名为chart的状态,并将该图表设置为该状态,并使用componentWillReceiveProps生命周期更新该图表以更新该图表。
import React, { Component } from 'react';

export class ChartComponent extends Component {

  constructor(props){
    super(props)
    this.state = { chart : null }
  }

  chart = React.createRef();

  componentDidMount(){
    // pass chartData to Chart below as this.props.chartData
    let theChart = new Chart(...)
    // set chart to state
    this.setState({ chart: theChart })
  }

  componentWillReceiveProps(nextProps, nextContext) {
    // update chart according to prop change
      this.state.chart.data.datasets.forEach((dataset) => {
        dataset.data.push(nextProps.chartData);
      });
      this.state.chart.update();
  }

  render(){
    return (
        <canvas id="myChart" ref={this.chart} />
    );
  }

};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获取chart.js图表以在Node / React Web应用程序中显示数据?

在 vue 中从 chart.js 更新图表

使用Chart.js使用数据库中的数据实时更新图表

如何使用python flask应用程序在d3js图表中动态加载json数据

为什么我的API中的数据没有显示在React中的chart.js图表上?

如何使用angular 7缩放chart.js中的图表

使用api中的数据初始化Chart.js图表

如何使用 Chart.js 在图表上正确显示数据集

在Chart.js中设置图表的高度

如何用新数据更新chart.js图表?

Canvas JS图表中的渲染数据

更新图表时修改chart.js中的标签

更新chart.js和angular中的图表

如何在Vue.js中使用Chart.js从API获取数据以显示图表

如何在图表JS的Y轴上应用美元符号?

呈现图表后如何为dc.js图表应用工具提示

如何确定'chart.js'插件服务中的图表类型

如何使Chart.js图表中的x轴从0开始?

如何在chart.js中向图表添加平移?

如何使用API office.js在Excel中插入数据不连续的图表?

如何在Google图表中应用格式的简单方法

如何在剑道图表中应用纯色效果

如何在烧瓶应用程序中嵌入pygal图表?

如何在Chart.JS中逗号化提供给图表的数据值?

如何在Chart.js图表中设置数据项之间的差距

如何在chart.js的图表工具提示中附加更多数据

如何使用 $nextTick 在 vue.js 中渲染 Plotly 图表

如何使用chart.js显示图表?

chart.js 在 IE11 中不显示图表