【问题标题】:Plot graph using react-d3使用 react-d3 绘制图形
【发布时间】:2017-08-21 13:30:34
【问题描述】:

我正在尝试制作我使用 react-d3-components 的一些数据的直方图。我的代码是这样的

import React, { Component } from 'react';
import * as d3 from 'd3';
import * as ReactD3 from 'react-d3-components';
import propTypes from 'prop-types';
var axios=require('axios');
var BarChart=ReactD3.BarChart;

class App extends Component {
  constructor(props){
    super(props);
    this.state={
      data:[],
      label:'',
      values:[],
      x:'',
      y:''
    }
  }

  componentDidMount(){
   this.loadData();   
  }

  loadData(){

      var me=this;
       axios({
          method:'GET',
          url:'https://www.alphavantage.co/query?function=TIME_SERIES_MONTHLY&symbol=SPY&apikey=2QEL3WC4KITIBISR',
        }).then(function(response){

          var values=[];
          var data=[];
          Object.keys(response.data['Monthly Time Series']).forEach(function(k){
            var y=response.data['Monthly Time Series'][k]["1. open"];

            me.setState({
              label:k,
              x:k,
              y:y
            })


           })
           values.push({"x":me.state.x,"y":me.state.y});
           data.push({"label":me.state.x,"values":values});
                       me.setState({
              data:data
            })
          console.log(me.state.data);

        }).catch(function(error){
          console.log(error);
        })
    }


  render() {

    return (
      <div>
        <BarChart data={this.state.data} width={100} height={100}/>
      </div>
    )
  }
}

App.propTypes={
    values:React.PropTypes.array

}

export default App;

使用上面的代码,我得到了这个错误

我指的文档是this

console.log(me.state.data)中data的值是这个[{…}]

0
:
label
:
"2000-02-29"
values
:
Array(1)
0
:
{x: "2000-02-29", y: "139.8000"}
length
:
1
__proto__
:
Array(0)
__proto__
:
Object
length
:
1
__proto__
:
Array(0)

【问题讨论】:

    标签: javascript reactjs d3.js react-d3


    【解决方案1】:

    根据图表需要处理数据格式似乎有问题。我还没有测试过,但这应该可以。

    class App extends Component {
      state = {
        label: 'Monthly Dates',
        values: []
      };
    
      componentDidMount() {
        this.loadData();
      }
    
      loadData() {
        axios({
          method: 'GET',
          url: 'https://www.alphavantage.co/query?function=TIME_SERIES_MONTHLY&symbol=SPY&apikey=2QEL3WC4KITIBISR'
        })
          .then(function(response) {
            const values = [];
            if (response && response.data && response.data['Monthly Time Series']) {
              Object.keys(response.data['Monthly Time Series']).forEach((keys) => {
                if (keys) {
                  const pointValue = {
                    x: String(keys),
                    y: Number(response.data['Monthly Time Series'][keys]['1. open'])
                  }
                  values.push(pointValue);
                }
              });
              this.setState({values});
            }
          })
          .catch(function(error) {
            console.log(error);
          });
      }
    
      getGraphData() {
        const { label, values } = this.state;
        return [{ label, values }]
      }
    
      renderGraph() {
        if (this.state.values && this.state.values.length) {
          return (
            <BarChart
              data={this.getGraphData()}
              width={1000}
              height={400}
              margin={{top: 10, bottom: 50, left: 50, right: 10}}
            />
          );
        }
        return '';
      }
    
      render() {
        return (
          <div>
            {this.renderGraph()}
          </div>
        )
      }
    }
    

    更新:在数据出现之前,您不应该渲染您的 BarChart。由于 BarChart 需要一个有效的数据格式,如下所示。

    [{
      label: 'somethingA',
      values: [{x: 'SomethingA', y: 10}, {x: 'SomethingB', y: 4}, {x: 'SomethingC', y: 3}]
    }];
    

    【讨论】:

    • 它又坏了吗@Aayushi / Ankit?我试过thisthis,但都没有工作。
    • @xp 依赖于外部 api。
    猜你喜欢
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多