React Chart.js 2 is a React wrapper for Chart.js, one of the most popular charting libraries. It provides a React-friendly API for creating interactive, responsive charts with extensive customization options. This guide walks through advanced usage of React Chart.js 2, including complex chart configurations, plugins, and dashboard implementations.
Prerequisites
Before you begin, make sure you have:
- Node.js version 14.0 or higher installed
- npm, yarn, or pnpm package manager
- A React project (version 16.8 or higher) or create-react-app setup
- Basic knowledge of React hooks (useState, useEffect, useRef)
- Familiarity with JavaScript/TypeScript
- Understanding of Chart.js concepts
Installation
Install React Chart.js 2 and Chart.js:
npm install react-chartjs-2 chart.js
Or with yarn:
yarn add react-chartjs-2 chart.js
Or with pnpm:
pnpm add react-chartjs-2 chart.js
After installation, your package.json should include:
{
"dependencies": {
"react-chartjs-2": "^5.0.0",
"chart.js": "^4.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
}
}
Project Setup
Register Chart.js components in your main entry file:
// src/index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import {
Chart as ChartJS,
CategoryScale,
LinearScale,
PointElement,
LineElement,
BarElement,
Title,
Tooltip,
Legend,
ArcElement
} from 'chart.js';
import App from './App';
ChartJS.register(
CategoryScale,
LinearScale,
PointElement,
LineElement,
BarElement,
Title,
Tooltip,
Legend,
ArcElement
);
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
First Example / Basic Usage
Let's create a simple line chart. Create a new file src/ChartExample.jsx:
// src/ChartExample.jsx
import React from 'react';
import { Line } from 'react-chartjs-2';
function ChartExample() {
const data = {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [
{
label: 'Sales',
data: [35, 28, 34, 32, 40, 32],
borderColor: 'rgb(75, 192, 192)',
backgroundColor: 'rgba(75, 192, 192, 0.2)',
}
]
};
const options = {
responsive: true,
plugins: {
legend: {
position: 'top',
},
title: {
display: true,
text: 'Monthly Sales'
}
}
};
return (
<div style={{ padding: '20px', maxWidth: '800px', margin: '0 auto' }}>
<h2>Basic Chart.js Example</h2>
<Line data={data} options={options} />
</div>
);
}
export default ChartExample;
Update your App.jsx:
// src/App.jsx
import React from 'react';
import ChartExample from './ChartExample';
import './App.css';
function App() {
return (
<div className="App">
<ChartExample />
</div>
);
}
export default App;
This creates a basic line chart with monthly sales data.
Understanding the Basics
React Chart.js 2 provides chart components:
- Line: Line charts
- Bar: Bar charts
- Pie: Pie charts
- Doughnut: Doughnut charts
- Data structure: Labels and datasets array
- Options: Chart configuration
- Plugins: Extend functionality
Key concepts for advanced usage:
-
Data structure: Object with
labelsanddatasetsarrays - Datasets: Array of dataset objects, each represents a data series
- Options: Configure chart appearance and behavior
- Plugins: Register and use plugins for extended features
- Responsive: Automatic responsive behavior
Here's an example with multiple datasets and custom styling:
// src/AdvancedChartExample.jsx
import React from 'react';
import { Line, Bar } from 'react-chartjs-2';
function AdvancedChartExample() {
const lineData = {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [
{
label: 'Sales',
data: [35, 28, 34, 32, 40, 32],
borderColor: 'rgb(75, 192, 192)',
backgroundColor: 'rgba(75, 192, 192, 0.2)',
},
{
label: 'Target',
data: [40, 35, 38, 36, 42, 38],
borderColor: 'rgb(255, 99, 132)',
backgroundColor: 'rgba(255, 99, 132, 0.2)',
}
]
};
const barData = {
labels: ['Q1', 'Q2', 'Q3', 'Q4'],
datasets: [
{
label: 'Revenue',
data: [12000, 15000, 18000, 20000],
backgroundColor: 'rgba(54, 162, 235, 0.6)',
borderColor: 'rgba(54, 162, 235, 1)',
borderWidth: 1
}
]
};
const options = {
responsive: true,
plugins: {
legend: {
position: 'top',
}
}
};
return (
<div style={{ padding: '20px', maxWidth: '1200px', margin: '0 auto' }}>
<h2>Advanced Chart.js Example</h2>
<div style={{ display: 'flex', flexDirection: 'column', gap: '40px' }}>
<div>
<h3>Line Chart with Multiple Series</h3>
<Line data={lineData} options={options} />
</div>
<div>
<h3>Bar Chart</h3>
<Bar data={barData} options={options} />
</div>
</div>
</div>
);
}
export default AdvancedChartExample;
Practical Example / Building Something Real
Let's build a comprehensive analytics dashboard:
// src/AnalyticsDashboard.jsx
import React, { useState } from 'react';
import { Line, Bar, Pie, Doughnut } from 'react-chartjs-2';
function AnalyticsDashboard() {
const [selectedPeriod, setSelectedPeriod] = useState('monthly');
const monthlyData = {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [
{
label: 'Sales',
data: [35, 28, 34, 32, 40, 32],
borderColor: 'rgb(75, 192, 192)',
backgroundColor: 'rgba(75, 192, 192, 0.2)',
},
{
label: 'Target',
data: [40, 35, 38, 36, 42, 38],
borderColor: 'rgb(255, 99, 132)',
backgroundColor: 'rgba(255, 99, 132, 0.2)',
}
]
};
const quarterlyData = {
labels: ['Q1', 'Q2', 'Q3', 'Q4'],
datasets: [
{
label: 'Sales',
data: [97, 106, 112, 120],
borderColor: 'rgb(75, 192, 192)',
backgroundColor: 'rgba(75, 192, 192, 0.2)',
},
{
label: 'Target',
data: [113, 116, 120, 125],
borderColor: 'rgb(255, 99, 132)',
backgroundColor: 'rgba(255, 99, 132, 0.2)',
}
]
};
const revenueData = {
labels: ['Q1', 'Q2', 'Q3', 'Q4'],
datasets: [
{
label: 'Revenue',
data: [12000, 15000, 18000, 20000],
backgroundColor: [
'rgba(255, 99, 132, 0.6)',
'rgba(54, 162, 235, 0.6)',
'rgba(255, 206, 86, 0.6)',
'rgba(75, 192, 192, 0.6)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)'
],
borderWidth: 1
}
]
};
const categoryData = {
labels: ['Product A', 'Product B', 'Product C', 'Product D'],
datasets: [
{
data: [35, 28, 34, 32],
backgroundColor: [
'rgba(255, 99, 132, 0.6)',
'rgba(54, 162, 235, 0.6)',
'rgba(255, 206, 86, 0.6)',
'rgba(75, 192, 192, 0.6)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)'
],
borderWidth: 1
}
]
};
const currentData = selectedPeriod === 'monthly' ? monthlyData : quarterlyData;
const lineOptions = {
responsive: true,
plugins: {
legend: {
position: 'top',
},
title: {
display: true,
text: 'Sales Performance'
}
}
};
const barOptions = {
responsive: true,
plugins: {
legend: {
display: false
},
title: {
display: true,
text: 'Quarterly Revenue'
}
}
};
const pieOptions = {
responsive: true,
plugins: {
legend: {
position: 'right',
},
title: {
display: true,
text: 'Product Distribution'
}
}
};
return (
<div style={{ padding: '20px', maxWidth: '1200px', margin: '0 auto' }}>
<h1>Analytics Dashboard</h1>
<div style={{ marginBottom: '20px', textAlign: 'center' }}>
<button
onClick={() => setSelectedPeriod('monthly')}
style={{
padding: '8px 16px',
margin: '0 5px',
backgroundColor: selectedPeriod === 'monthly' ? '#007bff' : '#6c757d',
color: 'white',
border: 'none',
borderRadius: '4px',
cursor: 'pointer'
}}
>
Monthly
</button>
<button
onClick={() => setSelectedPeriod('quarterly')}
style={{
padding: '8px 16px',
margin: '0 5px',
backgroundColor: selectedPeriod === 'quarterly' ? '#007bff' : '#6c757d',
color: 'white',
border: 'none',
borderRadius: '4px',
cursor: 'pointer'
}}
>
Quarterly
</button>
</div>
<div style={{ display: 'flex', flexDirection: 'column', gap: '40px' }}>
<Line data={currentData} options={lineOptions} />
<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '20px' }}>
<Bar data={revenueData} options={barOptions} />
<Pie data={categoryData} options={pieOptions} />
</div>
</div>
</div>
);
}
export default AnalyticsDashboard;
Now create an interactive chart with real-time updates:
// src/InteractiveChart.jsx
import React, { useState, useEffect } from 'react';
import { Line } from 'react-chartjs-2';
function InteractiveChart() {
const [data, setData] = useState({
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [
{
label: 'Sales',
data: [35, 28, 34, 32, 40, 32],
borderColor: 'rgb(75, 192, 192)',
backgroundColor: 'rgba(75, 192, 192, 0.2)',
}
]
});
useEffect(() => {
const interval = setInterval(() => {
setData(prevData => ({
...prevData,
datasets: [{
...prevData.datasets[0],
data: prevData.datasets[0].data.map(value =>
value + Math.floor(Math.random() * 10) - 5
)
}]
}));
}, 2000);
return () => clearInterval(interval);
}, []);
const options = {
responsive: true,
plugins: {
legend: {
position: 'top',
},
title: {
display: true,
text: 'Real-time Sales Data'
}
},
animation: {
duration: 750
}
};
return (
<div style={{ padding: '20px', maxWidth: '900px', margin: '0 auto' }}>
<h2>Interactive Real-time Chart</h2>
<Line data={data} options={options} />
</div>
);
}
export default InteractiveChart;
Update your App.jsx:
// src/App.jsx
import React from 'react';
import AnalyticsDashboard from './AnalyticsDashboard';
import InteractiveChart from './InteractiveChart';
import './App.css';
function App() {
return (
<div className="App">
<AnalyticsDashboard />
<InteractiveChart />
</div>
);
}
export default App;
This example demonstrates:
- Analytics dashboard
- Multiple chart types
- Interactive features
- Real-time updates
- Dynamic data
- Custom styling
Common Issues / Troubleshooting
Chart not displaying: Make sure you've registered Chart.js components in your entry file. Use
ChartJS.register()to register required components.Data format error: Ensure data follows the correct format with
labelsanddatasetsarrays. Datasets should be an array of dataset objects.Plugins not working: Register plugins using
ChartJS.register(). Some features require specific plugins to be registered.Styling issues: Customize colors and styles in the dataset objects. Use
backgroundColorandborderColorfor styling.Responsive not working: Charts are responsive by default. Use
responsive: truein options. Ensure the container has proper dimensions.Performance: For large datasets, consider data sampling or pagination. Chart.js handles large datasets well, but optimization may be needed for very large datasets.
Next Steps
Now that you have an advanced understanding of React Chart.js 2:
- Explore all available chart types
- Learn about advanced configurations
- Implement custom plugins
- Add animations and transitions
- Create real-time updating charts
- Learn about other chart libraries
- Check the official repository: https://github.com/jerairrest/react-chartjs-2
Summary
You've successfully integrated React Chart.js 2 into your React application with advanced features including analytics dashboards, real-time charts, and interactive visualizations. React Chart.js 2 provides a powerful solution for creating professional data visualizations with extensive customization options.
SEO Keywords
react-chartjs-2
React Chart.js
react-chartjs-2 tutorial
React data visualization
react-chartjs-2 installation
React chart library
react-chartjs-2 example
React Chart.js dashboard
react-chartjs-2 setup
React interactive charts
react-chartjs-2 customization
React chart component
react-chartjs-2 plugins
React chart visualization
react-chartjs-2 getting started
Top comments (0)