11. 條件渲染和列表渲染中的效能問題
錯誤示例: 使用 v-if
和 v-for
在同一元素上可能導致效能問題。
<!-- 不推薦 --> <div v-for="item in items" v-if="item.isVisible"> {{ item.name }} </div>
解決方案: 儘量避免在同一元素上同時使用 v-if
和 v-for
。如果需要過濾資料,可以在計算屬性或方法中處理。
<!-- 推薦 --> <div v-for="item in visibleItems"> {{ item.name }} </div> <script setup> import { computed } from 'vue'; const visibleItems = computed(() => items.filter(item => item.isVisible)); </script>
12. 全域性註冊元件與區域性註冊元件混淆
錯誤示例: 全域性和區域性元件註冊混淆導致元件無法正確顯示。
解決方案: 明確區分全域性和區域性元件註冊,並確保在合適的地方註冊元件。
// 全域性註冊 app.component('MyComponent', MyComponent); // 區域性註冊 export default { components: { MyComponent, }, };
13. 事件匯流排(Event Bus)替代方案
錯誤示例: 使用過時的事件匯流排模式進行元件間通訊。
解決方案: 在 Vue 3 中,推薦使用狀態管理庫如 Pinia 或 Vuex,或者透過父元件傳遞 props 和事件來實現元件間的通訊。
// 使用 Pinia import { useStore } from '@/store'; const store = useStore(); store.commit('updateState', payload);
14. 雙向繫結(v-model)使用不當
錯誤示例: 不正確地使用 v-model
導致資料同步問題。
解決方案: 確保 v-model
的值是響應式的,並理解 v-model
在不同元件中的用法。
<!-- 簡單輸入框 --> <input v-model="message"> <!-- 自定義元件 --> <CustomInput v-model="message">
15. Teleport 元件使用不當
錯誤示例: Teleport 元件配置錯誤,導致內容未正確渲染到目標位置。
解決方案: 確保 Teleport 元件的目標選擇器存在且路徑正確。
<teleport to="#modal-container"> <div id="modal">Modal content</div> </teleport>
16. Suspense 元件使用不當
錯誤示例: Suspense 元件配置錯誤,導致非同步元件載入失敗。
解決方案: 確保 Suspense 元件內包含非同步元件,並正確處理預設插槽和 fallback 插槽。
<suspense>
<template #default>
<AsyncComponent />
</template>
<template #fallback>
<div>Loading...</div>
</template>
</suspense>
17. 型別宣告和 TypeScript 整合問題
錯誤示例: TypeScript 型別宣告不正確,導致編譯錯誤或執行時錯誤。
解決方案: 確保正確設定 TypeScript 型別宣告,並使用 Vue 3 提供的型別工具。
<script lang="ts" setup> import { ref, defineProps } from 'vue'; interface Props { message: string; } const props = defineProps<Props>(); </script>
18. 動態元件(<component>)使用不當
錯誤示例: 動態元件配置錯誤,導致元件切換時出現問題。
解決方案: 確保動態元件的 is
屬性指向正確的元件,並考慮使用 keep-alive
來快取元件狀態。
<component :is="currentComponent"></component> <keep-alive> <component :is="currentComponent"></component> </keep-alive>
19. 樣式衝突和 CSS 變數使用不當
錯誤示例: CSS 樣式衝突或 CSS 變數未正確應用。
解決方案: 使用 scoped 樣式、CSS Modules 或者 CSS 變數來避免樣式衝突,並確保變數定義和使用正確。
<style scoped> :root { --primary-color: #42b983; } .button { background-color: var(--primary-color); } </style>
20. 第三方庫整合問題
錯誤示例: 第三方庫整合不當,導致功能失效或樣式錯亂。
解決方案: 確保第三方庫正確安裝並引入,並檢查其文件以瞭解相容性和配置要求。
import SomeLibrary from 'some-library'; import 'some-library/dist/style.css'; // 初始化庫 SomeLibrary.init();
2.0-完。