🚀 React + TypeScript + Vite 完整開發指南
在現代前端開發中,React + TypeScript + Vite 已成為主流組合。 本篇將從 環境建置 → 架構設計 → 型別管理 → 效能優化 全面解析, 幫助你建立一套高效、可維護、具備擴展性的前端開發流程。
🧱 一、開發環境設定
1️⃣ 建立專案
npm create vite@latest my-app
cd my-app
npm install
npm run dev
選擇 React + TypeScript 範本,即可快速建立專案。
2️⃣ 必備套件
npm install -D eslint prettier @typescript-eslint/parser @typescript-eslint/eslint-plugin
3️⃣ TypeScript 設定重點
{
"compilerOptions": {
"strict": true,
"jsx": "react-jsx"
}
}
📁 二、專案結構設計
src/
├── assets/
├── components/
├── pages/
├── features/
├── hooks/
├── utils/
└── App.tsx
- 依「功能」拆分資料夾(Feature-based)
- 每個模組使用
index.ts統一出口 - 避免單一大型元件(維持低耦合)
⚛️ 三、React 開發最佳實踐
Hooks 使用
useState:基本狀態管理useEffect:副作用處理useContext:跨元件共享資料
自定義 Hook 範例
function useFetch(url: string) {
const [data, setData] = useState(null)
useEffect(() => {
fetch(url).then(res => res.json()).then(setData)
}, [url])
return data
}
效能優化
React.memo避免重複渲染useCallback/useMemo控制函數與計算- 大型列表使用 key + 分頁
🧠 四、TypeScript 型別設計
Props 型別
type Props = {
title: string
count?: number
}
const Card = ({ title, count }: Props) => {
return <div>{title} - {count}</div>
}
Union Type
type Status = 'idle' | 'loading' | 'success'
Discriminated Union
type State =
| { status: 'loading' }
| { status: 'success'; data: string }
⚡ 五、Vite 配置優化
vite.config.ts 範例
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
server: {
port: 3000
}
})
- 快速 HMR(熱更新)
- 自動 Code Splitting
- 輕量化打包
🚀 六、效能優化策略
Lazy Loading
const Page = React.lazy(() => import('./Page'))
圖片優化
- 使用 vite-plugin-imagemin
- 避免大圖直接載入
Web Worker
- 處理大量計算避免卡 UI
📦 七、狀態管理選擇
| 工具 | 適用情境 |
|---|---|
| Context | 小型專案 |
| Redux Toolkit | 大型專案 |
| Zustand | 輕量共享狀態 |
🧪 八、測試策略
- Jest + Testing Library:單元測試
- Cypress / Playwright:E2E 測試
🚀 九、部署與 CI/CD
- GitHub Actions 自動建置
- 輸出至
dist/ - 部署至 Vercel / Netlify
♿ 十、可維護性與最佳實務
- 使用 semantic HTML
- 遵循 ARIA 規範
- 撰寫清晰 commit message
📌 總結
React + TypeScript + Vite 提供了一套現代化且高效率的前端開發體驗。 透過良好的架構設計與效能優化策略,可以大幅提升開發效率與系統穩定性。
💬 你目前是使用哪一種前端架構?有沒有踩過什麼坑?歡迎留言交流!
沒有留言: