TypeScript & React Native 開發規範
# TypeScript & React Native 開發規範
## 程式碼風格與結構
- 編寫簡潔、技術性的 TypeScript 程式碼,提供準確的範例
- 使用函數式和宣告式程式設計模式;避免使用類別
- 優先使用迭代和模組化,避免程式碼重複
- 使用帶有輔助動詞的描述性變數名稱(例如:isLoading、hasError)
- 檔案結構:匯出的元件、子元件、輔助函數、靜態內容、型別
- 遵循 Expo 官方文件進行專案設定和配置:https://docs.expo.dev/
## 命名慣例
- 目錄使用小寫字母和連字號(例如:components/auth-wizard)
- 優先使用命名匯出(named exports)元件
## TypeScript 使用
- 所有程式碼使用 TypeScript;優先使用 interface 而非 type
- 避免使用 enum;改用 map 物件
- 使用帶有 TypeScript interface 的函數式元件
- 啟用 TypeScript 嚴格模式以獲得更好的型別安全
## 語法與格式化
- 純函數使用 function 關鍵字
- 避免在條件式中使用不必要的大括號;簡單語句使用簡潔語法
- 使用宣告式 JSX
- 使用 Prettier 保持程式碼格式化一致性
## UI 與樣式
- 使用 Expo 內建元件處理常見 UI 模式和佈局
- 使用 Flexbox 和 Expo 的 useWindowDimensions 實現響應式設計
- 使用 styled-components 或 Tailwind CSS 進行元件樣式設計
- 使用 Expo 的 useColorScheme 實現深色模式支援
- 使用 ARIA 角色和原生無障礙屬性確保高無障礙性標準
- 使用 react-native-reanimated 和 react-native-gesture-handler 實現高效能動畫和手勢
## 安全區域管理
- 使用 react-native-safe-area-context 的 SafeAreaProvider 全域管理安全區域
- 使用 SafeAreaView 包裹頂層元件以處理 iOS 和 Android 的凹口、狀態欄和其他螢幕插入
- 可滾動內容使用 SafeAreaScrollView 確保尊重安全區域邊界
- 避免為安全區域硬編碼 padding 或 margin;依賴 SafeAreaView 和 context hooks
## 效能優化
- 最小化 useState 和 useEffect 的使用;優先使用 context 和 reducer 進行狀態管理
- 使用 Expo 的 AppLoading 和 SplashScreen 優化應用啟動體驗
- 圖片優化:支援時使用 WebP 格式,包含尺寸數據,使用 expo-image 實現懶加載
- 使用 React 的 Suspense 和 dynamic imports 對非關鍵元件實現代碼分割和懶加載
- 使用 React Native 內建工具和 Expo 調試功能分析和監控效能
- 透過 memoizing 元件和適當使用 useMemo、useCallback hooks 避免不必要的重新渲染
## 導航
- 使用 react-navigation 進行路由和導航;遵循堆疊、標籤和抽屜導航器的最佳實踐
- 利用深度連結和通用連結改善用戶參與度和導航流程
- 使用 expo-router 的動態路由實現更好的導航處理
## 狀態管理
- 使用 React Context 和 useReducer 管理全域狀態
- 使用 react-query 進行數據獲取和快取;避免過多的 API 呼叫
- 複雜狀態管理考慮使用 Zustand 或 Redux Toolkit
- 使用 expo-linking 等庫處理 URL 搜尋參數
## 錯誤處理與驗證
- 使用 Zod 進行運行時驗證和錯誤處理
- 使用 Sentry 或類似服務實現適當的錯誤日誌記錄
- 優先處理錯誤處理和邊界情況:
- 在函數開頭處理錯誤
- 對錯誤條件使用提前返回,避免深度嵌套的 if 語句
- 避免不必要的 else 語句;改用 if-return 模式
- 實作全域錯誤邊界以捕獲和處理意外錯誤
- 使用 expo-error-reporter 記錄和報告生產環境錯誤
## 測試
- 使用 Jest 和 React Native Testing Library 編寫單元測試
- 使用 Detox 為關鍵用戶流程實作整合測試
- 使用 Expo 測試工具在不同環境中運行測試
- 考慮對元件進行快照測試以確保 UI 一致性
## 安全性
- 清理用戶輸入以防止 XSS 攻擊
- 使用 react-native-encrypted-storage 安全儲存敏感數據
- 使用 HTTPS 和適當的身份驗證確保與 API 的安全通訊
- 遵循 Expo 安全指南保護應用:https://docs.expo.dev/guides/security/
## 國際化 (i18n)
- 使用 react-native-i18n 或 expo-localization 進行國際化和本地化
- 支援多語言和 RTL 佈局
- 確保文字縮放和字體調整以實現無障礙性
## 關鍵慣例
1. 依賴 Expo 託管工作流程簡化開發和部署
2. 優先考慮行動網路核心指標(加載時間、卡頓和響應性)
3. 使用 expo-constants 管理環境變數和配置
4. 使用 expo-permissions 優雅處理設備權限
5. 實作 expo-updates 進行空中更新(OTA)
6. 遵循 Expo 應用部署和發布最佳實踐:https://docs.expo.dev/distribution/introduction/
7. 透過在 iOS 和 Android 平台上廣泛測試確保相容性
## API 文件
- 使用 Expo 官方文件進行專案設定和配置:https://docs.expo.dev/
參考 Expo 文件獲取有關視圖、藍圖和擴展的最佳實踐詳細資訊。