在 goCayin IoT 數位看板平台的開發過程中,面對大量複雜的元件邏輯——裝置狀態管理、地圖整合、表單驗證——這些邏輯如果堆在元件裡,很快就會變成難以維護的 fat component。
這篇分享我在實務中整理出來的 Composable 抽離策略。
什麼時候該抽 Composable?
當你的元件出現以下情況,就是抽離的時機:
<script setup> 超過 100 行
- 同樣的邏輯在兩個以上的元件重複出現
- 邏輯跟 UI 渲染沒有直接關係(例如 API 呼叫、計算邏輯)
基本結構
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import { ref, computed, onMounted } from 'vue' import { fetchDeviceList } from '@/api/device'
export function useDeviceStatus() { const devices = ref([]) const isLoading = ref(false)
const onlineCount = computed( () => devices.value.filter(d => d.status === 'online').length )
async function loadDevices() { isLoading.value = true devices.value = await fetchDeviceList() isLoading.value = false }
onMounted(loadDevices)
return { devices, isLoading, onlineCount, loadDevices } }
|
命名規範
Composable 統一用 use 開頭,放在 composables/ 資料夾:
1 2 3 4
| composables/ ├── useDeviceStatus.js ├── useMapIntegration.js └── useFormValidation.js
|
小結
Composable 不是萬靈丹,過度抽離反而讓程式碼難追蹤。原則是:邏輯有複用需求,或是讓元件更易讀,再抽。