Vue 3 的組合式 API-hooks

Vue 3 的組合式 API

組合式 API 是 Vue 3 的核心特性之一,它允許開發者將組件的邏輯拆分為可復用的函數。組合式 API 的主要特點是

  • 邏輯復用:將邏輯提取到獨立的函數中,方便在多個組件中復用。
  • 組織清晰:將相關的邏輯分組,而不是將邏輯分散到 data、methods、computed 等選項中。
  • 更接近函數式編程:通過函數組合的方式組織代碼。

在 Vue 3 中,自定義 Hooks 是通過組合式 API 的 ref、reactive、watch、computed 等函數實現的

  • 基本的自定義 Hook
// useCounter.ts
import { ref } from 'vue';
export function useCounter(initialValue = 0) {const count = ref(initialValue);const increment = () => {count.value++;};const decrement = () => {count.value--;};return { count, increment, decrement };
}

在組件中使用:

<script setup>
import { useCounter } from './useCounter';const { count, increment, decrement } = useCounter(10);
</script><template><div><p>Count: {{ count }}</p><button @click="increment">Increment</button><button @click="decrement">Decrement</button></div>
</template>
  • 路由跳轉
// useNavigation.ts
import { RouteLocationRaw } from 'vue-router'
import { useRouter } from 'vue-router'export function useNavigation() {const router = useRouter()// 基本跳轉const navigateTo = (to: RouteLocationRaw) => {return router.push(to)}// 替換當前路由const replaceRoute = (to: RouteLocationRaw) => {return router.replace(to)}// 返回上一頁const goBack = (delta = -1) => {router.go(delta)}// 前進const goForward = () => {router.go(1)}return {navigateTo,replaceRoute,goBack,goForward,router}
}

在組件中使用示例

<script setup lang="ts">
import { useNavigation } from '@/hooks/useNavigation'const {navigateTo,replaceRoute,goBack,goForward
} = useNavigation()// 路徑跳轉
const gotoHome = () => {navigateTo('/home')
}// 命名路由帶參數
const gotoDetail = (id: string) => {navigateTo({name: 'Detail',params: { id }})
}// 帶查詢參數
const gotoSearch = (keyword: string) => {navigateTo({path: '/search',query: { q: keyword }})
}// 替換當前路由
const replaceToLogin = () => {replaceRoute('/login')
}
</script><template><button @click="gotoHome">首頁</button><button @click="gotoDetail('123')">詳情頁</button><button @click="goBack">返回</button>
</template>
  • 消息提示hooks
/useMessage.ts
import { ElMessage, ElMessageBox, ElNotification } from 'element-plus'
import { useI18n } from './useI18n'
export const useMessage = () => {const { t } = useI18n()return {// 消息提示info(content: string) {ElMessage.info(content)},// 錯誤消息error(content: string) {ElMessage.error(content)},// 成功消息success(content: string) {ElMessage.success(content)},// 警告消息warning(content: string) {ElMessage.warning(content)},// 彈出提示alert(content: string) {ElMessageBox.alert(content, t('common.confirmTitle'))},// 錯誤提示alertError(content: string) {ElMessageBox.alert(content, t('common.confirmTitle'), { type: 'error' })},// 成功提示alertSuccess(content: string) {ElMessageBox.alert(content, t('common.confirmTitle'), { type: 'success' })},// 警告提示alertWarning(content: string) {ElMessageBox.alert(content, t('common.confirmTitle'), { type: 'warning' })},// 通知提示notify(content: string) {ElNotification.info(content)},// 錯誤通知notifyError(content: string) {ElNotification.error(content)},// 成功通知notifySuccess(content: string) {ElNotification.success(content)},// 警告通知notifyWarning(content: string) {ElNotification.warning(content)},// 確認窗體confirm(content: string, tip?: string) {return ElMessageBox.confirm(content, tip ? tip : t('common.confirmTitle'), {confirmButtonText: t('common.ok'),cancelButtonText: t('common.cancel'),type: 'warning'})},// 刪除窗體delConfirm(content?: string, tip?: string) {return ElMessageBox.confirm(content ? content : t('common.delMessage'),tip ? tip : t('common.confirmTitle'),{confirmButtonText: t('common.ok'),cancelButtonText: t('common.cancel'),type: 'warning'})},// 導出窗體exportConfirm(content?: string, tip?: string) {return ElMessageBox.confirm(content ? content : t('common.exportMessage'),tip ? tip : t('common.confirmTitle'),{confirmButtonText: t('common.ok'),cancelButtonText: t('common.cancel'),type: 'warning'})},// 提交內容prompt(content: string, tip: string) {return ElMessageBox.prompt(content, tip, {confirmButtonText: t('common.ok'),cancelButtonText: t('common.cancel'),type: 'warning'})}}
}

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

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

相關文章

Web滲透之XSS注入

XSS的類型 1、反射型XSS 我們構建好一個urlXSS的payload&#xff0c;發送給受害者&#xff0c;受害者點擊惡意鏈接后會在受害者的瀏覽器上執行惡意代碼。反射型XSS是一次性的&#xff0c;而且比較容易被發現。通常惡意鏈接會被修改成短鏈接&#xff0c;或釣魚圖片的形式。 2…

【Nginx】Nginx代理Tomcat配置及404問題解決

當Tomcat返回HTTP 404未找到錯誤時&#xff0c;可以通過以下兩種方式設置跳轉到指定地址&#xff1a; ① 在Tomcat應用內部配置錯誤頁面跳轉&#xff08;直接修改Tomcat的Web應用配置&#xff09; ② 在Nginx反向代理層攔截404錯誤并跳轉&#xff08;無需修改Tomcat&#xff0c…

某公司網絡OSPF單區域配置

1.配置背景&#xff1a; xx公司網絡由三臺路由器和一臺交換機組成&#xff0c;現在想要三臺路由器之間通過OSPF實現互連互通。 2.網絡結構如下&#xff1a; 3.具體配置&#xff1a; 3.1路由器 RA 配置&#xff1a; 1.更改主機名稱&#xff1a; Router>en Router#conf t…

電腦知識 | TCP通俗易懂詳解 <一>

目錄 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f68d;什么是TCP/TCP協議 三、&#x1f9cd;?♂為什么TCP可靠 1.&#x1f970;關于可靠 2.&#x1f920;哪里可靠 3.&#x1f393;?圖片的三次握手&#xff0c;四次揮手 4.&#x1f4da;?知識點總結 四、&…

MyBatis 中 Mapper 傳遞參數的多種方法

# MyBatis Mapper 傳遞參數的多種方法及其優勢 在使用 MyBatis 進行數據庫操作時&#xff0c;Mapper 接口的參數傳遞是一個非常基礎但又十分重要的部分。不同的參數傳遞方式適用于不同的場景&#xff0c;合理選擇可以大大提高代碼的可讀性和維護性。本文將詳細介紹幾種常見的 …

Dify 插件開發筆記

Dify 插件開發 開發流程 #mermaid-svg-U9rSMmcbWvcGcFMu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-U9rSMmcbWvcGcFMu .error-icon{fill:#552222;}#mermaid-svg-U9rSMmcbWvcGcFMu .error-text{fill:#552222;st…

行星際激波在日球層中的傳播:Propagation of Interplanetary Shocks in the Heliosphere (第二部分)

行星際激波在日球層中的傳播&#xff1a;Propagation of Interplanetary Shocks in the Heliosphere &#xff08;第一部分&#xff09;- Chapter 1: Introduction & Chapter 2: Basics of Magnetohydrodynamics 行星際激波在日球層中的傳播&#xff1a;Propagation of In…

巴法云平臺-TCP設備云-微信小程序實時接收顯示數據-原理

微信小程序通過WebSocket或HTTP長輪詢連接平臺&#xff08;而非直接使用TCP&#xff09;&#xff01;&#xff01;&#xff01; 物聯網平臺對協議層的一種封裝設計——將底層通信協議&#xff08;如TCP&#xff09;與應用層業務邏輯&#xff08;如主題路由&#xff09;解耦&am…

QT Sqlite數據庫-教程002 查詢數據-上

【1】DQL語句&#xff1a; DQL語句&#xff08;數據查詢語言&#xff09;&#xff0c;用來查詢數據記錄。DQL 基本結構由 SELECT FROM、WHERE、JOIN 等子句構成。DQL 語句并不會改變數據庫&#xff0c;而是讓數據庫將查詢結果發送結果集給客戶端&#xff0c;返回的結果是一張虛…

基礎數學:線性代數與優化理論

本篇文章簡單帶您復習線性代數與優化理論&#xff08;主要是我發表的文章中涉及過的或相關聯的&#xff09; 微積分和概率與統計由此進&#xff1a;基礎數學&#xff1a;微積分和概率與統計-CSDN博客 圖論與信息論由此進&#xff1a;基礎數學&#xff1a;圖論與信息論-CSDN博…

java android持久化數據

1. SQLite 數據庫&#xff08;Android 內置&#xff09; 1.1 創建數據庫幫助類 public class DatabaseHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME "MyDatabase.db";private static final int DATABASE_VERSION 1;// 表名和列名…

鴻蒙動畫與交互設計:ArkUI 3D變換與手勢事件詳解

大家好&#xff0c;我是 V 哥。 在鴻蒙 NEXT 開發中&#xff0c;ArkUI 提供了豐富的 3D 變換和手勢事件功能&#xff0c;可用于創建生動且交互性強的用戶界面。下面詳細介紹 ArkUI 的 3D 變換和手勢事件&#xff0c;并給出相應的 ArkTS 案例代碼。 1. ArkUI 3D 變換 ArkUI 支…

HTTP 和 HTTPS 協議的區別及使用場景

在互聯網的世界里,HTTP 和 HTTPS 是我們經常接觸到的兩種網絡協議,它們在數據傳輸、安全性等方面存在諸多差異,適用的場景也各有不同。? 一、HTTP 和 HTTPS 的基本概念? HTTP,即超文本傳輸協議(Hyper - Text Transfer Protocol),是一種用于分布式、協作式和超媒體信息…

【微服務管理】注冊中心:分布式系統的基石

在分布式系統日益普及的當下&#xff0c;如何高效地管理眾多服務實例成為關鍵問題。注冊中心應運而生&#xff0c;它猶如分布式系統的 “指揮中樞”&#xff0c;承擔著服務注冊、發現等核心任務&#xff0c;為整個系統的穩定運行和高效協作提供堅實保障。本文將深入探討注冊中心…

高并發短信系統設計:基于SharingJDBC的分庫分表、大數據同步與實時計算方案

高并發短信系統設計&#xff1a;基于SharingJDBC的分庫分表、大數據同步與實時計算方案 一、概述 在當今互聯網應用中&#xff0c;短信服務是極為重要的一環。面對每天發送2000萬條短信的需求&#xff0c;我們需要一個能夠處理海量數據&#xff08;一年下來達到數千萬億級別&…

2025最新系統 Git 教程(七)(完結)

第4章 分布式Git 4.1 分布式 Git - 分布式工作流程 你現在擁有了一個遠程 Git 版本庫&#xff0c;能為所有開發者共享代碼提供服務&#xff0c;在一個本地工作流程下&#xff0c;你也已經熟悉了基本 Git 命令。你現在可以學習如何利用 Git 提供的一些分布式工作流程了。 這一…

OpenCV 圖像旋轉

一、OpenCV 圖像旋轉介紹 在計算機視覺和圖像處理領域&#xff0c;圖像旋轉是指將圖像圍繞某個中心點按照一定的角度進行轉動。旋轉操作會改變圖像中像素的位置&#xff0c;從而得到新的圖像布局。這一操作在很多場景中都有重要應用&#xff0c;比如文檔矯正、目標檢測時對圖像…

<C#>在 .NET 開發中,依賴注入, 注冊一個接口的多個實現

在 .NET 開發里&#xff0c;有時一個接口會有多個實現類&#xff0c;此時就需要向依賴注入容器注冊多個實現。下面會詳細介紹不同場景下如何注冊多個實現&#xff0c;以及怎樣從容器中解析這些實現。 1. 注冊多個實現 在 .NET 中&#xff0c;依賴注入容器可以通過不同方式注冊…

idea 保存格式化 但是不格式化 Xml

xml- 其他 - 保持空格勾選上 https://blog.csdn.net/m0_65724734/article/details/128378290?spm1001.2101.3001.6650.8&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-9-128378290-blog-135147277.235%5Ev43%5Epc_blog_bo…

如何在C++中優雅地繪制圖表

如何在C項目中優雅地繪制圖表 matplotlibpreparematplotlibcpp.hpython3vs configuretest Gnuplotpreparegnuplotgnuplot-iostream.hboostvs configuretest MathGL 在C項目中&#xff0c;在進行一些數據分析時往往不夠直觀&#xff0c;若能借助圖表進行分析可以達到事半功倍的效…