---
# System prepended metadata

title: "\U0001F3C5Day39 - React 套件應用 (5) - Chart.js"
tags: [React 直播班 - 2025 冬季班]

---

# 🏅Day39 - React 套件應用 (5) - Chart.js

Chart.js 是一個輕量級的 JavaScript 圖表庫，用於在網站上輕鬆創建各種互動式圖表。它基於 HTML5 的 <canvas> 元素，並提供了簡單直觀的 API 來生成各種常見的圖表類型，包括條形圖、折線圖、圓餅圖等。Chart.js 支援動畫效果、響應式設計，並且可以與其他前端框架（如 React、Vue、Angular 等）輕鬆整合。

[官方網站](https://www.chartjs.org/)
    
Chart.js 支援多種圖表類型，包括：
條形圖（Bar Chart）
折線圖（Line Chart）
圓餅圖（Pie Chart）
雷達圖（Radar Chart）
散點圖（Scatter Chart）
氣泡圖（Bubble Chart）
極區圖（Polar Area Chart）
    
例如下面的程式碼，就是一個圓餅圖的範例，跟其他相關的設定：
```js
const PieChart = () => {
  const chartRef = useRef(null);  // 用來引用 canvas 元素

  useEffect(() => {
    // 確保圖表只初始化一次
    const ctx = chartRef.current.getContext('2d');

    new Chart(ctx, {
      type: 'pie',  // 圓餅圖
      data: {
        labels: ['Red', 'Blue', 'Yellow'],  // 標籤
        datasets: [{
          label: 'My Pie Chart',  // 圖表標題
          data: [12, 19, 9],  // 各區塊的數據
          backgroundColor: [  // 設定每個區塊的顏色
            'rgba(255, 99, 132, 0.2)',  // 紅色
            'rgba(54, 162, 235, 0.2)',  // 藍色
            'rgba(255, 206, 86, 0.2)'   // 黃色
          ],
          borderColor: [  // 設定邊框顏色
            'rgba(255, 99, 132, 1)',  // 紅色邊框
            'rgba(54, 162, 235, 1)',  // 藍色邊框
            'rgba(255, 206, 86, 1)'   // 黃色邊框
          ],
          borderWidth: 1  // 邊框寬度
        }]
      },
      options: {
        responsive: true,  // 使圖表響應式
        plugins: {
          legend: {
            position: 'top',  // 圖例顯示位置
          },
          tooltip: {
            enabled: true,  // 啟用工具提示
          }
        }
      }
    });
  }, []);

  return (
    <div>
      <canvas ref={chartRef} width="400" height="400"></canvas>
    </div>
  );
}
```

## 題目
請複製 （右下角 fork）這個[範例](https://codepen.io/yen-kg/pen/vYoMaYj?editors=1011)，利用 chart.js 的方式生成一個條形圖（Bar Chart），資料可以自行隨意建立，只要有正確的呈現圖表就行。
![image](https://hackmd.io/_uploads/r11S7CdGkx.png)


<!-- 解答： 
```
const ChartComponent = () => {
  const chartRef = React.useRef(null);
  const [chartInstance, setChartInstance] = useState(null);

  useEffect(() => {
    if (chartRef.current && !chartInstance) {
      const newChartInstance = new Chart(chartRef.current, {
        type: 'bar',
        data: {
          labels: ['January', 'February', 'March', 'April', 'May', 'June'],
          datasets: [
            {
              label: 'Sales',
              data: [12, 19, 3, 5, 2, 3],
              backgroundColor: 'rgba(75, 192, 192, 0.2)',
              borderColor: 'rgba(75, 192, 192, 1)',
              borderWidth: 1,
            },
          ],
        },
        options: {
          scales: {
            y: {
              beginAtZero: true,
            },
          },
        },
      });
      setChartInstance(newChartInstance);
    }

    return () => {
      if (chartInstance) {
        chartInstance.destroy();
      }
    };
  }, [chartInstance]);

  return <canvas ref={chartRef} width="400" height="200" />;
};
```
-->
| Name | Codepen | 
| -------- | -------- |
|TWLeoC|[Codepen](https://codepen.io/TWLeoC/pen/ByzxebP?editors=0010)|
| Jin |[Codepen](https://codepen.io/Jin-L/pen/Eaypgyb)|
| Chia |[Codepen](https://codepen.io/Chia-the-encoder/pen/OPXwbRW)|
| Nooooora | [CodePen](https://codepen.io/Nora-Ch/pen/JoKBbeo?editors=1011)|
| Tetsu |[Codepen](https://codepen.io/ttgchang/pen/YPWjpLW)|
| RUDY |[Codepen](https://codepen.io/Rudy-crw/pen/dPXjWox?editors=0011)|  
| Rogan |[Codepen](https://codepen.io/RoganHsu/pen/ZYOjKvm?editors=1011)|
| chippy |[Codepen](https://hackmd.io/7QVd-5n5QzCMj_iw3gma5w)|  
| Eric | [Codepen](https://codepen.io/wc-su/pen/QwEBgZe) |
| Miikaa    | [codepen](https://codepen.io/Miikaa/pen/XJKBMLYj)     | 
| 小懿    | [codepen](https://codepen.io/YT-the-vuer/pen/qENyVeV)     |
| 平平    | [codepen](https://codepen.io/ypinpin/pen/myEjqbw)     |
| cks40660 | [codepen](https://codepen.io/CKS40660/pen/ogLMpyQ)|
| kashiwatei | [codepen](https://codepen.io/kashiwatei/pen/azZjYGB?editors=1011)|
| Percy | [codepen](https://codepen.io/Percy-Ku/pen/MYeBGpb?editors=0010)|
| 老屠 | [codepen](https://codepen.io/fsgfxvlb-the-selector/pen/VYjBPRX?editors=0011)|
| Eileen | [codepen](https://codepen.io/Eileen-io/pen/MYeBLyQ)|
| 7lun | [codepen](https://codepen.io/mfyvqhsn-the-bold/pen/EayeyqN?editors=0011)|
| Jenna | [codepen](https://codepen.io/abiscc14/pen/xbOagjO)|
| Leonard | [codepen](https://codepen.io/hyyfjqra-the-sans/pen/LEZJWRe?editors=0011)|
| 星雪糖 | [codepen](https://codepen.io/vfpofbgm-the-scripter/pen/raLZraR?editors=1011)|
| 7Red | [Codepen](https://codepen.io/cch2655/pen/gbMdEaW) |
    
    