前端核心知識:Vue 3 編程的 10 個實用技巧

在這里插入圖片描述

文章目錄

    • 1. **使用 `ref` 和 `reactive` 管理響應式數據**
      • 原理解析
      • 代碼示例
      • 注意事項
    • 2. **組合式 API(Composition API)**
      • 原理解析
      • 代碼示例
      • 優勢
    • 3. **使用 `watch` 和 `watchEffect` 監聽數據變化**
      • 原理解析
      • 代碼示例
      • 注意事項
    • 4. **使用 `provide` 和 `inject` 實現跨組件通信**
      • 原理解析
      • 代碼示例
      • 優勢
    • 5. **使用 `Teleport` 實現組件掛載到任意位置**
      • 原理解析
      • 代碼示例
      • 優勢
    • 6. **使用 `Suspense` 處理異步組件加載**
      • 原理解析
      • 代碼示例
      • 優勢
    • 7. **使用 `v-model` 實現雙向綁定**
      • 原理解析
      • 代碼示例
      • 自定義組件 `CustomInput`
      • 優勢
    • 8. **使用 `defineComponent` 增強 TypeScript 支持**
      • 原理解析
      • 代碼示例
      • 優勢
    • 9. **使用 `Fragment` 減少不必要的 DOM 元素**
      • 原理解析
      • 代碼示例
      • 優勢
    • 10. **使用 `Custom Directives` 自定義指令**
      • 原理解析
      • 代碼示例
      • 使用示例
      • 優勢
    • 總結

在這里插入圖片描述

1. 使用 refreactive 管理響應式數據

在這里插入圖片描述

原理解析

Vue 3 引入了 refreactive 兩個核心 API 來管理響應式數據:

  • ref:用于創建基本類型(如字符串、數字)的響應式數據,返回一個包含 value 屬性的對象。
  • reactive:用于創建復雜對象或數組的響應式數據,返回一個代理對象。

代碼示例

import { ref, reactive } from 'vue';// 使用 ref 管理基本類型數據
const count = ref(0);
console.log(count.value); // 0// 使用 reactive 管理復雜對象
const state = reactive({name: 'Vue 3',version: '3.2.0',
});
console.log(state.name); // Vue 3

注意事項

  • 使用 ref 時,需要通過 .value 訪問或修改數據。
  • reactive 只能用于對象或數組,不能用于基本類型。

2. 組合式 API(Composition API)

在這里插入圖片描述

原理解析

組合式 API 是 Vue 3 的核心特性之一,它允許開發者將邏輯代碼組織成可復用的函數,而不是依賴于選項式 API(如 datamethods 等)。通過 setup 函數,開發者可以更靈活地管理組件的狀態和邏輯。

代碼示例

import { ref, computed } from 'vue';export default {setup() {const count = ref(0);const doubleCount = computed(() => count.value * 2);function increment() {count.value++;}return {count,doubleCount,increment,};},
};

優勢

  • 邏輯復用性更強。
  • 代碼組織更清晰,尤其是復雜組件。

3. 使用 watchwatchEffect 監聽數據變化

在這里插入圖片描述

原理解析

  • watch:用于監聽特定響應式數據的變化,支持深度監聽和懶執行。
  • watchEffect:自動追蹤其依賴的響應式數據,并在依賴變化時立即執行。

代碼示例

import { ref, watch, watchEffect } from 'vue';const count = ref(0);// 使用 watch 監聽 count 的變化
watch(count, (newValue, oldValue) => {console.log(`count changed from ${oldValue} to ${newValue}`);
});// 使用 watchEffect 自動追蹤依賴
watchEffect(() => {console.log(`count is now ${count.value}`);
});

注意事項

  • watch 更適合精確控制監聽邏輯。
  • watchEffect 適合不需要明確指定依賴的場景。

4. 使用 provideinject 實現跨組件通信

原理解析

provideinject 是 Vue 3 中實現跨組件通信的 API,特別適合在深層嵌套組件中傳遞數據。

代碼示例

// 父組件
import { provide, ref } from 'vue';export default {setup() {const message = ref('Hello from parent');provide('message', message);},
};// 子組件
import { inject } from 'vue';export default {setup() {const message = inject('message');return { message };},
};

優勢

  • 避免逐層傳遞 props 的繁瑣。
  • 適合全局狀態管理(如主題、用戶信息等)。

在這里插入圖片描述

5. 使用 Teleport 實現組件掛載到任意位置

原理解析

Teleport 是 Vue 3 新增的特性,允許將組件的內容渲染到 DOM 中的任意位置,常用于模態框、通知等場景。

代碼示例

<template><button @click="showModal = true">Open Modal</button><Teleport to="body"><div v-if="showModal" class="modal"><p>This is a modal!</p><button @click="showModal = false">Close</button></div></Teleport>
</template><script>
import { ref } from 'vue';export default {setup() {const showModal = ref(false);return { showModal };},
};
</script>

優勢

  • 解決組件層級和樣式隔離問題。
  • 提升用戶體驗。

6. 使用 Suspense 處理異步組件加載

原理解析

Suspense 是 Vue 3 中用于處理異步組件加載的特性,可以在組件加載完成前顯示占位內容。

代碼示例

<template><Suspense><template #default><AsyncComponent /></template><template #fallback><div>Loading...</div></template></Suspense>
</template><script>
import { defineAsyncComponent } from 'vue';const AsyncComponent = defineAsyncComponent(() =>import('./AsyncComponent.vue')
);export default {components: {AsyncComponent,},
};
</script>

優勢

  • 提升用戶體驗,避免頁面空白。
  • 簡化異步組件加載邏輯。

在這里插入圖片描述

7. 使用 v-model 實現雙向綁定

原理解析

Vue 3 對 v-model 進行了改進,支持多個 v-model 綁定,并可以通過 modelValueupdate:modelValue 自定義綁定邏輯。

代碼示例

<template><CustomInput v-model:firstName="firstName" v-model:lastName="lastName" />
</template><script>
import { ref } from 'vue';export default {setup() {const firstName = ref('John');const lastName = ref('Doe');return { firstName, lastName };},
};
</script>

自定義組件 CustomInput

<template><input :value="firstName" @input="$emit('update:firstName', $event.target.value)" /><input :value="lastName" @input="$emit('update:lastName', $event.target.value)" />
</template><script>
export default {props: ['firstName', 'lastName'],
};
</script>

優勢

  • 支持多個 v-model 綁定。
  • 更靈活的雙向綁定實現。

8. 使用 defineComponent 增強 TypeScript 支持

在這里插入圖片描述

原理解析

defineComponent 是 Vue 3 中用于增強 TypeScript 支持的 API,可以提供更好的類型推斷和代碼提示。

代碼示例

import { defineComponent, ref } from 'vue';export default defineComponent({setup() {const count = ref(0);return { count };},
});

優勢

  • 提升 TypeScript 開發體驗。
  • 更好的類型安全和代碼提示。

9. 使用 Fragment 減少不必要的 DOM 元素

原理解析

Vue 3 支持多根節點組件(Fragment),可以減少不必要的 DOM 元素,提升渲染性能。

代碼示例

<template><header>Header</header><main>Main Content</main><footer>Footer</footer>
</template>

優勢

  • 減少不必要的 DOM 層級。
  • 提升渲染性能。

10. 使用 Custom Directives 自定義指令

在這里插入圖片描述

原理解析

Vue 3 允許開發者自定義指令,用于直接操作 DOM 元素。

代碼示例

import { directive } from 'vue';const vFocus = {mounted(el) {el.focus();},
};export default {directives: {focus: vFocus,},
};

使用示例

<input v-focus />

優勢

  • 提供更靈活的 DOM 操作能力。
  • 適合實現特定功能(如自動聚焦、拖拽等)。

總結

本文詳細介紹了 Vue 3 編程中的 10 個實用技巧,涵蓋了響應式數據管理、組合式 API、跨組件通信、異步組件加載等多個方面。通過掌握這些技巧,開發者可以更高效地構建現代化的 Vue 應用,提升代碼質量和開發體驗。希望本文能為您的 Vue 3 開發之旅提供幫助!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76478.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76478.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76478.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Web API系列】XMLHttpRequest API和Fetch API深入理解與應用指南

前言 在現代Web開發中&#xff0c;客戶端與服務器之間的異步通信是構建動態應用的核心能力。無論是傳統的AJAX技術&#xff08;基于XMLHttpRequest&#xff09;還是現代的Fetch API&#xff0c;它們都為實現這一目標提供了關鍵支持。本文將從底層原理、核心功能、代碼實踐到實…

[特殊字符] Spring Boot 日志系統入門博客大綱(適合初學者)

一、前言 &#x1f4cc; 為什么日志在項目中如此重要&#xff1f; 在開發和維護一個后端系統時&#xff0c;日志就像程序運行時的“黑匣子”&#xff0c;幫我們記錄系統的各種行為和異常。一份良好的日志&#xff0c;不僅能幫助我們快速定位問題&#xff0c;還能在以下場景中…

IP協議之IP,ICMP協議

1.因特網中的主要協議是TCP/IP&#xff0c;Interneet協議也叫TCP/IP協議簇 2.ip地址用點分十進制表示&#xff0c;由32位的二進制表示&#xff0c;兩部分組成&#xff1a;網絡標識主機標識 3.IP地址分類; A:0.0.0.0-127.255.255.255 B&#xff1a;128.0.0.0-191.255.255.25…

GPIO_ReadInputData和GPIO_ReadInputDataBit區別

目錄 1、GPIO_ReadInputData: 2、GPIO_ReadInputDataBit: 總結 GPIO_ReadInputData 和 GPIO_ReadInputDataBit 是兩個函數&#xff0c;通常用于讀取微控制器GPIO&#xff08;通用輸入輸出&#xff09;引腳的輸入狀態&#xff0c;特別是在STM32系列微控制器中。它們之間的主要…

洛古B4158 [BCSP-X 2024 12 月小學高年級組] 質數補全(線性篩/dfs)

B4158 [BCSP-X 2024 12 月小學高年級組] 質數補全 - 洛谷 思路1:線性篩,字符串匹配,枚舉 質數篩選 要解決這個問題&#xff0c;首先得找出指定范圍內&#xff08;這里是 1 到 10000000&#xff09;的所有質數。常用的質數篩選算法有埃拉托斯特尼篩法&#xff08;埃氏篩&#…

一周學會Pandas2 Python數據處理與分析-Pandas2讀取Excel

鋒哥原創的Pandas2 Python數據處理與分析 視頻教程&#xff1a; 2025版 Pandas2 Python數據處理與分析 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili Excel格式文件是辦公使用和處理最多的文件格式之一&#xff0c;相比CSV文件&#xff0c;Excel是有樣式的。Pandas2提…

NVIDIA H100 vs A100:新一代GPU架構性能對比分析

一、核心架構演進對比 ?Ampere架構&#xff08;A100&#xff09;?采用臺積電7nm工藝&#xff0c;集成540億晶體管&#xff0c;配備6,912個CUDA核心和432個第三代Tensor Core&#xff0c;支持FP16、TF32和INT8精度計算。其顯存子系統采用HBM2e技術&#xff0c;80GB版本帶寬可…

保護PCBA的不同方法:噴三防漆 vs 鍍膜

PCBA&#xff08;印刷電路板組件&#xff09;的防護工藝中&#xff0c;噴三防漆和鍍膜&#xff08;如Parylene氣相沉積&#xff09;是兩種常見技 術。它們在防護目的上類似&#xff0c;但在具體實現方式和應用場景上有顯著差異。以下從外觀、工藝、性 能、物理性質和成本五個…

VitePress 項目部署 cloudflare page 提示 npm run build 錯誤

構建的錯誤信息如下&#xff1a; 09:52:57.975 ? YN0000: Done with warnings in 3s 120ms 09:52:58.072 Executing user command: npm run build 09:52:58.817 npm ERR! Missing script: "build" 09:52:58.818 npm ERR! 09:52:58.818 npm ERR! To see a list of …

C++學習之ORACLE③

1.集合運算符 查詢部門號是10和20的員工信息&#xff1a; &#xff1f;思考有幾種方式解決該問題 &#xff1f; SQL> select * from emp where deptno in(10, 20) SQL> select * from emp where deptno10 or deptno20 集合運算&#xff1a; Select * from emp …

人工智能之數學基礎:復矩陣

本文重點 復矩陣是線性代數中以復數為元素的矩陣,是實矩陣在復數域上的自然推廣。與實矩陣相比,復矩陣在數學性質、運算規則和應用場景上具有獨特性,尤其在量子力學、信號處理、控制理論等領域發揮關鍵作用。 復矩陣的定義與表示 定義:復矩陣指的是元素含有復數的矩陣。…

華清遠見成都中心嵌入式學習總結

一、Linux 基礎入門 課程首先介紹了 Linux 系統的六大特性&#xff0c;包括開源、免費、可裁剪等核心優勢。重點講解了文件系統結構&#xff0c;強調根目錄&#xff08;/&#xff09;作為唯一入口的樹狀結構。通過實操學習了 pwd、ls、cd 等基礎命令&#xff0c;掌握了絕對路徑…

linux安裝ollama

倆種方式都可 一、linux通過docker安裝ollama鏡像 1.下載安裝ollama鏡像 # 安裝 Docker sudo yum install docker sudo systemctl start docker#docker查看所有容器 docker ps -a # 查看所有容器# docker查看指定容器 docker ps -a |grep ollama# 創建模型存儲目錄&#xff…

Redis 學習目標

&#x1f3af; Redis 學習目標&#xff08;開發者視角&#xff09; ? 一、學習完成后能掌握的核心能力&#xff1a; 分類具體內容&#x1f4e6; 基礎能力熟練掌握 Redis 五大數據結構&#xff08;String、List、Hash、Set、ZSet&#xff09;&#xff0c;會用也會選對場景&am…

gerrit配置及使用git-lfs

gerrit服務器端配置 下載git-lfs插件 登錄Dashboard [Jenkins] (gerritforge.com)&#xff0c;下載對應版本的插件 配置gerrit 將下載的lfs.jar插件放到${GERRIT_SITE}/plugins/下面為所有倉庫啟用git-lfs 此步驟需要修改 All-projects 倉庫配置&#xff0c;步驟如下 1、克隆倉…

深入理解 Linux PATH 環境變量:配置與優化!!!

深入理解 Linux PATH 環境變量&#xff1a;配置與優化 &#x1f680; 歡迎來到 Linux 環境變量的奇妙世界&#xff01;今天我們來聊聊那個讓命令行如魚得水的幕后英雄——PATH 環境變量&#xff01;&#x1f60e; 通過這篇博客&#xff0c;你將學會如何配置它、優化它&#xff…

如何在AMD MI300X 服務器上部署 DeepSeek R1模型?

DeepSeek-R1憑借其深度推理能力備受關注&#xff0c;在語言模型性能基準測試中可與頂級閉源模型匹敵。 AMD Instinct MI300X GPU可在單節點上高效運行新發布的DeepSeek-R1和V3模型。 用戶通過SGLang優化&#xff0c;將MI300X的性能提升至初始版本的4倍&#xff0c;且更多優化將…

簡化DB操作:Golang 通用倉庫模式

介紹 本代碼包提供一個用于數據庫操作的通用倉庫 (GenericRepository)&#xff0c;利用 Golang 和 GORM (Go ORM) 實現。該倉庫設計用于簡化數據庫的 CRUD (創建、讀取、更新、刪除) 操作&#xff0c;支持批處理、沖突處理、分頁查詢等高級功能。 主要功能 創建記錄 (Create…

JavaWeb 課堂筆記 —— 08 請求響應

本系列為筆者學習JavaWeb的課堂筆記&#xff0c;視頻資源為B站黑馬程序員出品的《黑馬程序員JavaWeb開發教程&#xff0c;實現javaweb企業開發全流程&#xff08;涵蓋SpringMyBatisSpringMVCSpringBoot等&#xff09;》&#xff0c;章節分布參考視頻教程&#xff0c;為同樣學習…

雙引擎驅動:解密音視頻體驗的QoS技術底座與QoE感官革命

QoS 定義&#xff1a;QoS&#xff08;Quality of Service&#xff0c;服務質量&#xff09;衡量音視頻傳輸技術層面的性能表現&#xff0c;聚焦網絡傳輸和系統處理能力&#xff0c;通過客觀指標量化服務質量。核心指標 碼率/帶寬&#xff1a;數據傳輸速率上限&#xff0c;直接…