React + Tailwind 組件生成提示詞(文字描述 → 可直接用的組件,含響應式、深色模式與無障礙)

要做一個前端組件或頁面區塊(表單、卡片列表、導航欄、彈窗)又不想從零寫樣式時用:描述功能和狀態,得到 TypeScript + Tailwind 的 React 組件、所有狀態的處理(加載、空、錯誤、禁用)和使用示例。

NNathaniel bigo··原創首發·AI 輔助撰寫
通用大模型 對話模型通用
【角色】你是一名資深前端工程師,寫的組件要能直接合進生產代碼:類型完整、狀態齊全、移動端可用、鍵盤和讀屏軟件可用。

【技術約束】
- 框架:[如 React 19 + TypeScript/Next.js App Router]
- 樣式:Tailwind CSS [版本,如 v4/v3]
- 已有組件庫(沒有就寫無):[如 shadcn/ui]
- 圖標庫:[如 lucide-react/無]

【組件需求】
- 組件名稱與用途:[組件名稱與用途]
- 展示的數據(字段、類型、示例值):[數據字段]
- 用戶交互:[如點擊、輸入、拖拽、鍵盤操作]
- 需要的狀態:[如加載中、空數據、出錯、禁用]
- 視覺參考(文字描述):[視覺風格描述]

【實現要求】
1. 先列出 Props 接口設計(名稱、類型、是否必填、預設值),數據通過 props 傳入,不在組件裏寫死請求地址。
2. 寫組件代碼:
   - 移動優先的響應式寫法,說明在哪個斷點改變佈局;
   - 同時提供深色模式樣式(dark: 變體);
   - 用語義化標籤;表單控件有關聯的 label;只有圖標的按鈕要有 aria-label;可聚焦元素有清晰的 focus-visible 樣式;彈窗類組件要處理 Esc 關閉和焦點管理;
   - 需要唯一 id 時用 useId 生成,避免同一頁面放多個組件時 id 衝突;
   - 不要用字符串拼接動態生成類名(如把顏色變量拼進 bg- 前綴),Tailwind 掃描不到這種類名,要寫成完整類名的映射表。
3. 覆蓋所有狀態:加載(骨架屏)、空狀態(說明 + 下一步操作)、錯誤(可重試)、禁用。
4. 給出一個使用示例和一份模擬數據。
5. 列出你做的假設,以及需要我確認的交互細節。

【輸出格式】
Props 表 → 組件代碼(一個 tsx 代碼塊)→ 使用示例 → 假設與待確認。

高亮處換成你自己的內容:[版本,如 v4/v3]、[如 shadcn/ui]、[如 lucide-react/無]、[組件名稱與用途]、[數據字段]、[如點擊、輸入、拖拽、鍵盤操作]、[如加載中、空數據、出錯、禁用]、[視覺風格描述]

ChatGPT Plus 充值

已被複製 0 次

使用說明

怎麼填變量:[版本] 要寫清——Tailwind v4 改為在 CSS 中配置(@import "tailwindcss"; 加 @theme),預設不再需要 tailwind.config.js;v3 項目則需要在配置文件的 content 裏包含組件路徑,否則樣式不會生成。[視覺風格描述] 寫「白底卡片、圓角、淺灰邊框、懸停時輕微上浮」這種可執行的描述,比「好看、高級」有效得多。

常見坑:

  • AI 預設寫出來的組件往往只有「正常狀態」,加載、空數據、出錯這幾個狀態要明確列在需求裏。
  • 用純 div 加 onClick 做按鈕,鍵盤無法操作,讀屏軟件也識別不了,要用 button 元素。
  • 一次只讓它做一個組件;整頁需求先讓它拆成組件樹再逐個生成。

追問技巧:生成後追問「檢查這個組件的無障礙問題,按 WCAG 列出來」;要改樣式時直接描述差異,比如「卡片間距改小,標題最多顯示兩行,超出用省略號」。

示例輸出

示例,僅供參考(帶清空按鈕的搜尋框)
tsx
import { useId } from 'react'

type SearchBoxProps = {
  value: string
  onChange: (value: string) => void
  placeholder?: string
}

export function SearchBox({ value, onChange, placeholder = '搜尋' }: SearchBoxProps) {
  const id = useId()
  return (
    <div className="relative w-full max-w-md">
      <label htmlFor={id} className="sr-only">搜尋</label>
      <input
        id={id}
        type="text"
        value={value}
        onChange={(e) => onChange(e.target.value)}
        placeholder={placeholder}
        className="w-full rounded-lg border border-gray-300 bg-white py-2 pl-3 pr-9 text-sm focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100"
      />
      {value && (
        <button
          type="button"
          aria-label="清空搜尋"
          onClick={() => onChange('')}
          className="absolute inset-y-0 right-0 flex w-9 items-center justify-center text-gray-400 hover:text-gray-600 focus-visible:text-gray-700"
        >
          ×
        </button>
      )}
    </div>
  )
}

同款作品

用這條提示詞做出來的作品;原作者會因此獲得積分

做同款

還沒有同款,來做第一個。

Nathaniel 的更多內容

同主題

同模型

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~