javascript - React Recharts-从不同的数组名称获取数据

标签 javascript reactjs

我有一个按日期品牌 显示图表的应用程序。不幸的是,我是新来的 react 和重新绘制图表,我不知道如何获得我想要的特定数据。 现在我使用的是面积图

至于我的数据

const data1 = [
{
  "data1result": [
    {
      "brand": "brand1"
    },
    {
      "brand": "brand2"
    },
    {
      "brand": "brand3"
    },
    {
      "brand": "brand4"
    }
  ]
}   
];

const data2 = [
{
  "data2result": [
    {
      "date": "12-01",
      "details": [
        {
          "amount": 24250,
          "brand": "brand1"
        },
        {
          "amount": 68350,
          "brand": "brand2"
        },
        {
          "amount": 60,
          "brand": "brand3"
        },
        {
          "amount": 11078,
          "brand": "brand4"
        }
      ]
    },
    {
      "date": "12-02",
      "details": [
        {
          "amount": 27340,
          "brand": "brand1"
        },
        {
          "amount": 16500,
          "brand": "brand2"
        },
        {
          "amount": 210,
          "brand": "brand3"
        },
        {
          "amount": 23229,
          "brand": "brand4"
        }
      ]
    },
    {
      "date": "12-03",
      "details": [
        {
          "amount": 24250,
          "brand": "brand1"
        },
        {
          "amount": 68350,
          "brand": "brand2"
        },
        {
          "amount": 60,
          "brand": "brand3"
        },
        {
          "amount": 11078,
          "brand": "brand4"
        }
      ]
    }
    ]
}
];

还有我的代码

export default React.createClass({
  render() {
    return (
      <ResponsiveContainer width="100%" aspect={3}>
          <AreaChart width={600} height={400} data={data}
                  margin={{top: 10, right: 30, left: 0, bottom: 0}}>
              <XAxis height={60} tick={<CustomizedAxisTick/>} dataKey="name"/>
              <YAxis/>
              <CartesianGrid strokeDasharray="3 3"/>
              <Tooltip/>
              {data1[0].data1result.map(function(c, index) {
                return (
                  <Area type='monotone' dataKey={c.name} stroke={colors[index % colors.length]} fill={colors[index % colors.length]} fillOpacity={0.3}/>
                  )
              })}
              <Legend/>
          </AreaChart>
      </ResponsiveContainer>
    )}
})

输出应该是这样的 enter image description here

最佳答案

您需要将数据构建为从 0 开始索引的对象数组。

let graphData = [
{
    date: "12-01",
    brand1: 24250,
    brand2: 68350,
    brand3: 60,
    brand4: 11078,
},
{
    date: "12-02",
    brand1: 27340,
    brand2: 16500,
    brand3: 210,
    brand4: 23229,
},
{
    date: "12-03",
    brand1: 24250,
    brand2: 68350,
    brand3: 60,
    brand4: 11078,
}]

你的组件看起来像这样

export default React.createClass({
_drawAreas(){
    let data = this.state.data || [];
    let dataSet = data[0], areaArr = [];        
    let count = 0, len = Object.keys(dataSet).length;
    let colorCodes = ["#17607D", "#F2D8A7", "#1FCECB", "#FF9311", "#003D5C", "#F27649", "#D5CDB6", "#008C74", "#30588C", "#263138"]
    for(let i in dataSet){
        if(dataSet.hasOwnProperty(i) && i != 'date'){
            areaArr.push(<Area type='monotone' dataKey={i} stroke={colorCodes[count]} key={`area-chart-${count}`} fill={colorCodes[count]}/>)               
            count++;
        } 
    }
    return areaArr;
}



render() {
return (
  <ResponsiveContainer width="100%" aspect={3}>
      <AreaChart width={600} height={400} data={this.state.data}
              margin={{top: 10, right: 30, left: 0, bottom: 0}}>
          <XAxis height={60} dataKey="date"/>
          <YAxis/>
          <CartesianGrid strokeDasharray="3 3"/>
          <Tooltip/>
          {this._drawAreas()}
         <Legend/>
      </AreaChart>
  </ResponsiveContainer>
)} })

关于javascript - React Recharts-从不同的数组名称获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41604153/

相关文章:

javascript - 使用没有 jquery 或 ajax 的普通 javascript 将 php 值传递给模态

reactjs - 在 React 中,使用 TypeScript,如何使用 RefForwardingComponent 和 forwardRef 将 ref 传递给自定义组件?

android - 是否可以使用 React Native 构建 Android SDK 和 iOS SDK?

reactjs - 输入 React Router 路由器组件?使困惑

javascript - 使用 jQuery 增加数字

javascript - 如何在组合 API 的 setup() 中使用 $axios Nuxt 模块?

javascript - 按 iso 字符串降序排序不起作用

node.js - IE 中未定义“代理”

javascript - 为什么 react 不更新 "then" promise 中的状态?

javascript - npm left-pad 的取消发布是如何破坏代码的?