javascript - 使用react-d3绘制图表

标签 javascript reactjs d3.js react-d3

我正在尝试使用 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;

使用上面的代码,我收到此错误 error

我所指的文档是this

console.log(me.state.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)

最佳答案

根据图表需要操作数据格式似乎存在问题。我还没有测试过,但这应该有效。

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 需要如下所示的有效数据格式。

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

关于javascript - 使用react-d3绘制图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45798443/

相关文章:

reactjs - React Router Switch 和确切路径

mysql - 将数据从 React 发送到 MySQL

javascript - 无法识别或风格化 d3 中的拉丝(即选定)元素

javascript - d3.js 如何从 csv 或表生成树层次结构

javascript - 强制从缓冲区重新加载 WebGL 纹理

javascript - 通过导航传递状态时,我的 this.props.navigation.state 未定义?

javascript - CSS - 当前宽度 + 像素

javascript - 在 Node.js 中,为什么使用 require 函数在模块之间变量相等?

javascript - 在 React 代码中使用 Babel Transform

javascript - 在d3中,如何从SVG线中获取插值线数据?