I am consuming data fixtures to fill the charts built with Recharts
I have two objects in my data: Finances and DAU
const charts = [
{
name: 'Finances',
data:[
{name: 'April', Balance: 48530, saving: 0},
{name: 'May', Balance: 50328, saving: 1798},
{name: 'June', Balance: 48573, saving: -1755},
{name: 'July', Balance: 48825, saving: 252}
]
},
{
name: 'DAU',
data: [
{Day: '2016-10-28', Android: 27, iOS: 12},
{Day: '2016-10-29', Android: 20, iOS: 17},
{Day: '2016-10-30', Android: 17, iOS: 13},
{Day: '2016-10-31', Android: 15, iOS: 13},
{Day: '2016-11-01', Android: 14, iOS: 11}
]
}
];
export default charts;
At the moment i am passing the datakey
only for the first data object ( Finance )
for <XAxis dataKey="name"/>
and the two lines component <Line type="monotone" dataKey="Balance"/>
and <Line type="monotone" dataKey="saving"/>
This is my chart component
export default class Chart extends React.Component {
render () {
const { chart, i } = this.props;
return (
<div>
<h1>{chart.name}</h1>
<LineChart width={600} height={300} data={chart.data}
margin={{top: 5, right: 30, left: 20, bottom: 5}}>
<XAxis dataKey="name"/>
<YAxis/>
<CartesianGrid strokeDasharray="3 3"/>
<Tooltip/>
<Legend />
<Line type="monotone" dataKey="Balance" stroke="#82ca9d" />
<Line type="monotone" dataKey="saving" stroke="#8884d8" activeDot={{r: 8}}/>
</LineChart>
</div>
);
}
};
How can i pass the dataKey
dynanmically in my XAxis
and Lines
components for the 2 objects Finances and DAU ?
I would add the keys to the chart objects and use them as props inside the Chart
component. Like so:
const charts = [
{
name: 'Finances',
xAxisKey: 'name',
line1Key: 'Balance',
line2Key: 'saving',
data:[
{name: 'April', Balance: 48530, saving: 0},
{name: 'May', Balance: 50328, saving: 1798},
{name: 'June', Balance: 48573, saving: -1755},
{name: 'July', Balance: 48825, saving: 252}
]
},
{
name: 'DAU',
xAxisKey: 'Day',
line1Key: 'Android',
line2Key: 'iOS',
data: [
{Day: '2016-10-28', Android: 27, iOS: 12},
{Day: '2016-10-29', Android: 20, iOS: 17},
{Day: '2016-10-30', Android: 17, iOS: 13},
{Day: '2016-10-31', Android: 15, iOS: 13},
{Day: '2016-11-01', Android: 14, iOS: 11}
]
}
];
And the component:
export default class Chart extends React.Component {
render () {
const { chart, i } = this.props;
return (
<div>
<h1>{chart.name}</h1>
<LineChart width={600} height={300} data={chart.data}
margin={{top: 5, right: 30, left: 20, bottom: 5}}>
<XAxis dataKey={chart.xAxisKey} />
<YAxis/>
<CartesianGrid strokeDasharray="3 3"/>
<Tooltip/>
<Legend />
<Line type="monotone" dataKey={chart.line1Key} stroke="#82ca9d" />
<Line type="monotone" dataKey={chart.line2Key} stroke="#8884d8" activeDot={{r: 8}}/>
</LineChart>
</div>
);
}
};