React 開發者可以在不撰寫自訂 Math.random() 樣板程式碼的情況下,使用瀏覽器型色彩產生器取得元件的隨機色彩,並將複製的 HEX、RGB 或 HSL 值直接貼到 style prop、CSS module 或 styled-component 中。每個色彩取自完整的 24 位元 RGB 空間,由於紅、綠、藍三個色頻各 256 階,共可產生 16,777,216 種組合 — 這與標準螢幕能顯示的範圍相同。在 React 專案中,這三種格式各有不同用途:HEX 字串可直接放進 CSS 檔案,rgb() 函式是 inline style props 所期望的格式,而 hsl() 則讓你在不離開 JSX 層的情況下輕鬆調整飽和度與亮度。點擊色票或任一數值即可將該字串複製到剪貼簿,因此工作流程是:選擇需要的色彩數量、產生、點擊複製,然後貼上。沒有需要安裝的函式庫、不需要 API 金鑰,也不需要上傳 — 色彩運算在瀏覽器本地端執行,之後再把值帶進你的 React 程式碼。這種方式符合大多數 React 團隊既有的工作方式:先寫元件、用擬真資料串接起來,之後再換成正式的色彩 token。

how to generate random color in react js
how to generate random color in react js

為什麼 React JS 專案需要隨機色彩

大多數 React 介面一開始都是用佔位資料。在設計師定案配色之前,儀表板的第一個版本通常會寫死色彩、重複使用灰色,或整體套用單一強調色,因為撰寫一套真正的色彩系統需要時間。隨機色彩正好能填補這個空缺。它能在不確定品牌決策的情況下,為原型提供視覺變化。一旦設計師或 token 系統提供正式值,這些隨機值就會逐行被替換掉。

除了原型設計之外,隨機色彩在 React 程式碼中幾個常見的地方也很有用:

  • 圖表資料序列與資料視覺化:Recharts、Chart.js 和 Victory 等函式庫會為每個資料序列預期一組色彩陣列。少量隨機色彩讓你能在設計團隊選定品牌配色之前,先把圖表串接起來。
  • 大頭貼背景:當使用者清單或留言串沒有個人圖片時,一個填上姓名的彩色圓圈是常見的替代方案。隨機色彩能讓每個大頭貼在視覺上保持區別。
  • 標籤、標記與標籤晶片的色彩:狀態徽章、篩選標籤和分類標籤通常需要每個項目有獨特的色彩。隨機選取能避免每個標籤晶片都長一樣的複製貼上問題。
  • 測試 fixture 與 Storybook 故事:元件測試和視覺快照需要看起來具決定性的資料。一次產生並存成 fixture 的隨機色彩,比每次測試都用完全隨機種子更容易理解。
  • 佔位 UI:骨架屏、載入狀態與空狀態插圖在正式文案和圖片準備好之前,都需要顏色。

用 3 步驟在 React JS 中產生隨機色彩

開啟 Random Color Generator,依下列三個步驟取得可立即複製的色彩字串,用於你的 React 元件。

  1. 在數量欄位中設定你想要的色彩數 (1 到 100)。單一元件請保留為 1;如果是五個資料序列的圖表或十個大頭貼的清單,請把數量提高,一次就拿到足夠的色票。
  2. 點擊 Generate 來產生一批全新的隨機色彩。每個色票會顯示色彩,並在旁邊顯示對應的 HEX、RGB 與 HSL 值。
  3. 點擊任何色票即可複製其 HEX,或點擊 RGB 或 HSL 值來複製該格式。字串此時已在你的剪貼簿中,可以貼到 React 程式碼裡。

開啟你的 .jsx 或 .tsx 檔,把數值貼到合適的位置。下一節會說明實際該放在哪裡。

把色彩貼進你的 React 元件

你複製的值就是一個純字串,所以 React 支援的每一種樣式寫法都能使用。以下是最常見的三種模式。

若是 JSX 中的 inline style prop,請把 HEX 值直接貼進 style 物件:{'{ backgroundColor: "#3a9d7f", color: "#ffffff" }'}。瀏覽器的解析方式與 CSS 檔完全相同,因此不需要任何轉換。

若是 CSS module,請像處理其他色彩一樣把 HEX 放進 .module.css 檔:.badge { background-color: #3a9d7f; color: #ffffff; }。接著在元件中引入該 class:import styles from './Badge.module.css';,然後套用 className={'{styles.badge}'}

若是 styled-components 或 emotion,請把值貼進 tagged template literal:const Badge = styled.span`background-color: #3a9d7f; color: #ffffff;`;。這個 template 在元件定義時只會求值一次,所以顏色會以常數形式被捕捉,而不是在每次 render 時重新計算。

若是 動態值,例如圖表資料序列或大頭貼清單,可以一次產生多個顏色,分別複製其 HEX,並儲存在檔案頂端的陣列中。之後在需要的地方引入該陣列。這些值在重新 render 之間保持穩定,因為它們是模組層級的常數,而不是 state。

關於動態產生的提醒:有些教學會建議在元件內部每次 render 時呼叫 Math.random()。這在玩具 demo 雖然可行,但會在 Next.js 造成 hydration 不一致、在 StrictMode 造成閃爍、在視覺測試中產生不穩定的快照。先用瀏覽器型工具產生一次顏色,再以字面值貼上,會更可預期且更容易撰寫。

HEX vs RGB vs HSL:在 React 中該用哪種格式

這三種格式描述的都是同一種顏色,但各自適合 React 專案中的不同場景。

格式範例值在 React 中的適用位置最適合
HEX#3a9d7fCSS 檔、CSS module、styled-components、Tailwind 設定靜態樣式、設計 token、品牌色
rgb()rgb(58, 157, 127)Inline style props、由 JavaScript 物件計算而得在 JSX 內部計算的動態樣式
hsl()hsl(158, 46%, 42%)任何需要在程式碼中調整顏色的地方在不離開 JS 的情況下微調亮度或飽和度

HEX 是大多數設計工具與 CSS 檔使用的格式,因此通常最容易貼上。RGB 對應螢幕實際混色的方式,也是 inline style props 從 JavaScript 物件計算顏色時所收到的形式。HSL 描述色彩的方式比較貼近人們的思考方式 — 先選色相,再調整飽和度與亮度 — 因此當你想把隨機結果微調成更可用的顏色,又不想離開編輯器時,它就是最佳選擇。

色彩空間本身很直觀:每個色頻有 256 個可能值,三個獨立色頻先產生 256 × 256 = 65,536 對組合,再乘以 256 得到 16,777,216 種可能顏色。這就是標準螢幕能顯示的整個 24 位元 RGB 範圍,也是 Random Color Generator 每次點擊時取色的範圍。

UI 中隨機色彩的無障礙提醒

隨機色彩不一定保證可閱讀。在任何隨機色彩用於承載文字或在你的 React UI 中傳達意義之前,請先檢查它與背景的對比度。WCAG 2.2 定義了明確的門檻:一般文字至少需達到 4.5:1 的對比度才能符合 AA,等級 AAA 則需 7:1。大型文字的門檻較低 — AA 為 3:1,AAA 為 4.5:1。

上線前一個快速流程:

  1. 用 Random Color Generator 產生你想用的顏色。
  2. 使用相同的的前景與背景配對,開啟對比度檢查工具。
  3. 若對比未通過,請重新產生,或透過調整 HSL 亮度色頻手動選擇較深或較淺的版本,直到檢查通過為止。

這一步對於本文文字、表單標籤和互動控制項最為重要。圖表背景、大頭貼圓圈和插圖底色等裝飾性元素通常不受對比規則限制,但任何承載資訊的內容仍須通過檢查。

何時使用產生器,何時在程式碼中產生

就一次性原型和視覺除錯而言,瀏覽器型產生器比撰寫輔助函式更快。沒有需要 import 的東西、沒有需要測試的東西,而且值已經是 CSS 預期的格式。

對於每次 render 都執行的正式環境程式碼,在模組載入時產生一次並以常數匯出是更乾淨的模式。把陣列放在專案頂端的 colors.js 檔中:export const seriesColors = ['#3a9d7f', '#e07a5f', '#7b9eaa'];。然後在需要的地方引入:import { seriesColors } from './colors';。這樣可以避免 SSR 框架 (例如 Next.js) 的 hydration 不一致,防止隨機值在伺服器與用戶端之間變動,也讓色彩日後更容易尋找和更新。

折衷方案 — 在執行階段產生但快取結果 — 適用於色彩依賴伺服器尚未取得的資料 (例如以使用者 ID 決定大頭貼背景) 的情況。在這種情境下,使用 ID 的穩定雜湊通常比純粹的 Math.random() 效果更好,因為同一個使用者在不同 session 和裝置上會得到相同的顏色。

最後一點關於狀態管理的提醒:若你的隨機色彩放在 React state (useState 或 useReducer) 中,它們會在元件掛載時重新抽取。這對 demo 很有用,但在真正的產品中會造成干擾。請把產生的色彩視為建置時期常數,而非即時狀態,這樣你的元件會更容易測試和理解。想更深入了解純程式碼方式,請參閱 JavaScript random color guide

想更深入了解,請參閱 How to Generate Random Colors in Python