Astro 專題 - 多語系商品探索儀表板 (Multi-lang Product Explorer) - 3

更新 發佈閱讀 7 分鐘

要在 Astro v5 儀表板中加入互動圖表,最推薦的方式是使用 Recharts 或 Chart.js 配合 React 或 Vue 組件,因為圖表需要客戶端(Client-side)的 JavaScript 來達成縮放、懸停提示等互動功能。

由於你使用了 Tailwind v4,我們可以直接利用其 CSS 變數來控制圖表的顏色,讓 UI 風格保持高度統一。


1. 安裝必要套件

這裡我們以 Recharts 為例(它是 React 生態中最受歡迎的圖表庫,且對響應式支援極佳):

# 安裝 React 整合包與 Recharts
npx astro add react
npm install recharts

2. 準備圖表數據 (Content Layer)

在 src/pages/[lang]/dashboard.astro 中,我們可以將 Content Layer 的商品數據處理成圖表需要的格式:

---
import { getCollection } from 'astro:content';
import PriceChart from '../../components/PriceChart'; // 這是我們等下要寫的 React 組件

const { lang } = Astro.params;
const allProducts = await getCollection('products', ({ id }) => id.startsWith(lang));

// 將數據轉換為圖表格式,例如:[ { name: 'iPhone', price: 999 }, ... ]
const chartData = allProducts.map(p => ({
name: p.data.title,
price: p.data.price
}));
---

3. 建立互動圖表組件

在 src/components/PriceChart.tsx 建立組件。注意我們使用了 client:load 指令來確保它在瀏覽器中運行:

import {
BarChart,
Bar,
XAxis,
YAxis,
CartesianGrid,
Tooltip,
ResponsiveContainer,
} from 'recharts'

export default function PriceChart({ data }) {
return (
<div className="h-[400px] w-full bg-white p-6 rounded-2xl shadow-sm border border-gray-100">
<h3 className="text-lg font-bold mb-4 text-gray-800">商品價格分佈圖</h3>
<ResponsiveContainer width="100%" height="100%">
<BarChart data={data}>
<CartesianGrid
strokeDasharray="3 3"
vertical={false}
stroke="#f1f5f9"
/>
<XAxis
dataKey="name"
axisLine={false}
tickLine={false}
tick={{ fill: '#64748b', fontSize: 12 }}
/>
<YAxis
axisLine={false}
tickLine={false}
tick={{ fill: '#64748b', fontSize: 12 }}
/>
<Tooltip
cursor={{ fill: '#f8fafc' }}
contentStyle={{
borderRadius: '8px',
border: 'none',
boxShadow: '0 4px 6px -1px rgb(0 0 0 / 0.1)',
}}
/>
{/* 使用 Tailwind v4 定義的顏色變數 */}
<Bar
dataKey="price"
fill="var(--color-brand)"
radius={[4, 4, 0, 0]}
/>
</BarChart>
</ResponsiveContainer>
</div>
)
}

4. 在頁面中引用 (關鍵的 client:load)

在 Astro 頁面中使用組件時,必須加上互動指令,否則它會被渲染成靜態 HTML:

<section class="mt-8">
<PriceChart client:load data={chartData} />
</section>

5. 進階:讓圖表隨主題顏色切換

Tailwind v4 讓「暗黑模式」變得非常簡單。你可以微調 PriceChart.tsx 讓它自動讀取 CSS 變數:

/* src/styles/global.css */
@theme {
--color-brand: #3b82f6;
}

@variant dark {
--color-brand: #60a5fa;
--color-dashboard-bg: #0f172a;
}

在圖表組件中,顏色會自動跟隨 --color-brand 的變化。

留言
avatar-img
李昀瑾的沙龍
0會員
37內容數
李昀瑾的沙龍的其他內容
2026/02/12
在 Astro v5 的架構下,為多語系儀表板加入搜索功能,最推薦的方案是 Pagefind。它是一個極其快速、靜態化的搜尋庫,非常適合 Astro 這種注重效能的框架。 以下是將 Pagefind 整合進你的專案的步驟: 1. 安裝與設定 Pagefind 是在構建(Build)完成後掃描
2026/02/12
在 Astro v5 的架構下,為多語系儀表板加入搜索功能,最推薦的方案是 Pagefind。它是一個極其快速、靜態化的搜尋庫,非常適合 Astro 這種注重效能的框架。 以下是將 Pagefind 整合進你的專案的步驟: 1. 安裝與設定 Pagefind 是在構建(Build)完成後掃描
2026/02/05
環境架構設計 astro v5 tailwind v4 vercel 佈署 i18n 多語系架構
2026/02/05
環境架構設計 astro v5 tailwind v4 vercel 佈署 i18n 多語系架構
2026/01/29
第三題:跨框架同步(React 與 Vue 的對話) 這是 Nano Stores 最強大的地方。假設你有一個專案,因為歷史原因或團隊偏好,同時使用了 React 和 Vue。 練習目標 建立一個 React 的輸入框(Input)。 建立一個 Vue 的預覽文字(Preview)。 當
2026/01/29
第三題:跨框架同步(React 與 Vue 的對話) 這是 Nano Stores 最強大的地方。假設你有一個專案,因為歷史原因或團隊偏好,同時使用了 React 和 Vue。 練習目標 建立一個 React 的輸入框(Input)。 建立一個 Vue 的預覽文字(Preview)。 當
看更多
你可能也想看
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
網站開發專案成功的關鍵在於與客戶的有效溝通。本文分享一個成功案例,說明如何透過明確掌握專案需求、主動提供技術方案、定期回報進度、完善技術協助及建立良好客戶關係,順利完成一個中文影片學習分享網站的建置,並獲得客戶高度滿意與後續合作機會。
Thumbnail
網站開發專案成功的關鍵在於與客戶的有效溝通。本文分享一個成功案例,說明如何透過明確掌握專案需求、主動提供技術方案、定期回報進度、完善技術協助及建立良好客戶關係,順利完成一個中文影片學習分享網站的建置,並獲得客戶高度滿意與後續合作機會。
Thumbnail
從實際應用中學習 Python 程式設計,提升技能並建立作品集。文章提供八個循序漸進的 Python 專案範例,涵蓋檔案操作、網路爬蟲、Web 應用、自動化腳本、數據分析、遊戲開發、API 互動及應用程式部署,並附上實戰建議及學習資源。
Thumbnail
從實際應用中學習 Python 程式設計,提升技能並建立作品集。文章提供八個循序漸進的 Python 專案範例,涵蓋檔案操作、網路爬蟲、Web 應用、自動化腳本、數據分析、遊戲開發、API 互動及應用程式部署,並附上實戰建議及學習資源。
Thumbnail
這份是我在使用Lovable做網站時,邊做邊紀錄的完整攻略,分享給需要的人。 給開發者/接案者的前言: Lovable 是一個強大的 AI 全端開發工具,要用它來賺錢,您必須清楚它的邊界在哪裡。這份指南將協助您完全掌控這個工具,從而自信地向客戶報價。 第一章:深度認識 Lovable 1.1
Thumbnail
這份是我在使用Lovable做網站時,邊做邊紀錄的完整攻略,分享給需要的人。 給開發者/接案者的前言: Lovable 是一個強大的 AI 全端開發工具,要用它來賺錢,您必須清楚它的邊界在哪裡。這份指南將協助您完全掌控這個工具,從而自信地向客戶報價。 第一章:深度認識 Lovable 1.1
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場從「網路連結 → 線下見面」的活動,我一開始其實有些猶豫,畢竟地點對我來說不近,加上平常在社群裡其實不太主動互動。 但因為主辦人西打誠意滿滿地邀請,甚至還提出補貼車資,最後我決定自費參加。現在回頭看,真的很值得! 場地很有感,氛圍超溫暖 一踏進場地就被暖黃的燈光包圍,小閣樓超舒適,還
Thumbnail
這是一場從「網路連結 → 線下見面」的活動,我一開始其實有些猶豫,畢竟地點對我來說不近,加上平常在社群裡其實不太主動互動。 但因為主辦人西打誠意滿滿地邀請,甚至還提出補貼車資,最後我決定自費參加。現在回頭看,真的很值得! 場地很有感,氛圍超溫暖 一踏進場地就被暖黃的燈光包圍,小閣樓超舒適,還
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News