VueUse/Core:提升Vue開發效率的實用工具庫

文章目錄

  • 引言
  • 什么是VueUse/Core?
  • 為什么選擇VueUse/Core?
  • 核心功能詳解
    • 1. 狀態管理
    • 2. 元素操作
    • 3. 實用工具函數
    • 4. 瀏覽器API封裝
    • 5. 傳感器相關
  • 實戰示例:構建一個拖拽上傳組件
  • 性能優化技巧
  • 與原生實現對比
  • 常見問題解答
  • 總結


在這里插入圖片描述

引言

在現代前端開發中,Vue.js 因其簡潔的API和響應式系統而廣受歡迎。然而,在日常開發中,我們經常會遇到一些重復性的需求,如表單處理、事件監聽、狀態管理等。這時候,一個高質量的實用工具庫可以顯著提升我們的開發效率。VueUse/Core 正是這樣一個為 Vue 開發者量身定制的工具集合。

什么是VueUse/Core?

VueUse/Core 是一個基于 Composition API 的Vue實用函數集合,它提供了一系列可復用的組合式函數,涵蓋了常見的開發需求。這個庫由 Anthony Fu 創建并維護,已經成為 Vue生態 中最受歡迎的工具庫之一。

官方地址:https://vueuse.nodejs.cn/

為什么選擇VueUse/Core?

  • 開箱即用的實用功能:無需重復造輪子,直接使用經過社區驗證的解決方案
  • 完美的Composition API集成:專為Vue 3設計,同時也支持Vue 2.7+
  • 極小的體積Tree-shakable 設計,只打包你使用的函數
  • 優秀的TypeScript支持:完整的類型定義,提升開發體驗
  • 活躍的社區:持續更新,不斷添加新功能

核心功能詳解

1. 狀態管理

VueUse 提供了多種狀態管理方案,比 VuexPinia 更輕量,適合簡單場景。

import { useStorage } from '@vueuse/core'// 自動持久化到localStorage
const count = useStorage('my-count', 0)

useStorage 會自動將狀態同步到 localStoragesessionStorage ,實現持久化狀態。

2. 元素操作

import { useMouse, useElementVisibility } from '@vueuse/core'const { x, y } = useMouse() // 跟蹤鼠標位置const isVisible = useElementVisibility(refElement) // 元素是否可見

3. 實用工具函數

import { useDebounceFn, useThrottleFn } from '@vueuse/core'const debouncedFn = useDebounceFn(() => {// 防抖邏輯
}, 500)const throttledFn = useThrottleFn(() => {// 節流邏輯
}, 500)

4. 瀏覽器API封裝

import { useClipboard, usePreferredDark } from '@vueuse/core'const { copy, isSupported } = useClipboard()const isDark = usePreferredDark() // 檢測用戶是否偏好暗色主題

5. 傳感器相關

import { useDeviceMotion, useBattery } from '@vueuse/core'const motion = useDeviceMotion() // 設備運動傳感器
const battery = useBattery() // 電池狀態

實戰示例:構建一個拖拽上傳組件

讓我們通過一個實際例子來展示 VueUse 的強大功能。

<template><div ref="dropZoneRef":class="{ 'active': isOverDropZone }"@click="openFileDialog"><input type="file" ref="inputRef"style="display: none" @change="handleFileChange"/><p>拖拽文件到這里或點擊上傳</p><div v-if="files.length"><div v-for="file in files" :key="file.name">{{ file.name }} ({{ formatFileSize(file.size) }})</div></div></div>
</template><script setup>
import { ref } from 'vue'
import { useDropZone,useFileDialog,useFileSystemAccess,useObjectUrl
} from '@vueuse/core'const dropZoneRef = ref(null)
const inputRef = ref(null)
const files = ref([])const { isOverDropZone } = useDropZone(dropZoneRef, (files) => {handleFiles(files)
})const { open, onChange } = useFileDialog({accept: 'image/*',multiple: true
})onChange((files) => {handleFiles(files)
})function handleFiles(newFiles) {files.value = [...files.value, ...newFiles]
}function formatFileSize(bytes) {if (bytes === 0) return '0 Bytes'const k = 1024const sizes = ['Bytes', 'KB', 'MB', 'GB']const i = Math.floor(Math.log(bytes) / Math.log(k))return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
}function openFileDialog() {open()
}
</script><style scoped>
.active {border: 2px dashed #42b983;background-color: rgba(66, 185, 131, 0.1);
}
</style>

這個示例展示了如何使用多個 VueUse 函數快速構建一個功能豐富的拖拽上傳組件。

性能優化技巧

  1. 按需導入:VueUse支持 Tree-shaking ,只導入你需要的函數
import { useDebounceFn } from '@vueuse/core' // 正確
import VueUse from '@vueuse/core' // 避免這樣導入
  1. 合理使用防抖和節流:對于頻繁觸發的事件,使用 useDebounceFnuseThrottleFn

  2. 及時清理副作用VueUse 會自動清理大部分副作用,但對于自定義監聽器,記得在 onUnmounted 中清理

  3. 利用共享狀態:對于全局狀態,考慮使用 createSharedComposable 創建共享實例

與原生實現對比

讓我們比較一下原生實現和使用 VueUse 的實現差異:

原生實現鼠標跟蹤:

import { ref, onMounted, onUnmounted } from 'vue'const x = ref(0)
const y = ref(0)function update(e) {x.value = e.pageXy.value = e.pageY
}onMounted(() => {window.addEventListener('mousemove', update)
})onUnmounted(() => {window.removeEventListener('mousemove', update)
})

使用 VueUse:

import { useMouse } from '@vueuse/core'const { x, y } = useMouse()

顯然,VueUse 版本更簡潔,且不需要手動管理事件監聽器的生命周期。

常見問題解答

Q: VueUse適合生產環境嗎?
A: 是的,VueUse 已經在許多生產環境中使用,并且有良好的測試覆蓋率。

Q: VueUse會增加多少打包體積?
A: 由于 Tree-shaking 支持,你只打包你使用的函數。單個函數通常只有幾KB。

Q: 如何貢獻自己的函數?
A: VueUse是開源項目,歡迎通過 GitHub 提交PR。確保你的函數有良好的TypeScript支持和測試用例。

總結

VueUse/Core 是一個強大而靈活的 Vue 工具庫,它通過提供一系列精心設計的組合式函數,極大地提升了 Vue 開發的效率和體驗。無論你是需要處理常見的UI交互,還是需要訪問瀏覽器API,VueUse 都能提供簡潔優雅的解決方案。

通過本文的介紹,你應該已經了解了 VueUse 的核心功能和優勢。建議從官方文檔開始,逐步嘗試將 VueUse 集成到你的項目中,體驗它帶來的開發效率提升。


希望這篇文章能幫助你更好地理解和使用 VueUse/Core 。如果你有任何問題或建議,歡迎在評論區留言討論!

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

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

相關文章

stm32 ADC單通道轉換

stm32c8t6僅有12位分辨率 1、單次轉換 非掃描 1、初始化 void Ad_Init() {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//配置ADCCLK時鐘分頻,ADC的輸入時鐘不得超過14MHzRCC_ADCCLKConfig(RCC_PCLK2_Div6);G…

2KW壓縮機驅動參考設計【SCH篇】

實物展示&#xff1a; ACDC: VAC和VAC-為交流電壓檢測&#xff1a; 1.C33 C34作為Y電容走線寬度要求&#xff1a; Y電容一般用于L/N到地之間&#xff08;L-PE 或 N-PE&#xff09;&#xff0c;主要作用是抑制共模干擾。其走線的電流非常小&#xff0c;推薦使用 ≥ 1mm 寬的走…

python05——循環結構

1、while循環 n0 #初始條件 while n<5: #判斷print(hello python) #要重復執行的代碼print(n) #注意同級代碼縮進相同n1 #計數器結果&#xff1a; hello python 0 hello python 1 hello python 2 hello python 3 hello python 4 hello python 5 #求階乘和 sum0 n1 whil…

LINUX編譯、運行、測試lowcoder_CN

參考 二者沒有太大差異。 LINUX編譯、運行、測試lowcoder-CSDN博客 下載 git clone https://github.com/mousheng/lowcoder_CN 或 git clone https://gitcode.com/gh_mirrors/lo/lowcoder_CNcd lowcoder_CN三個模塊 node-service api-service client 每個模塊都有自己的…

Python 基礎之函數命名

幾個問題 使用描述性蛇形命名法&#xff08;snake_case&#xff09;Python函數名應使用什么大小寫格式&#xff1f;為什么函數名要具有描述性&#xff1f;方法的命名規范是什么&#xff1f;函數、變量和類的命名有何區別&#xff1f; Python函數的命名有一些不可違背的硬性規…

redis 命令大全整理

http://doc.redisfans.com/ 原網址 Redis 命令分類 Key(鍵) Key(鍵)命令 exists/del/keys/type/scanobject/move/dump/migratettl/pttl/persist/expireat/pexpireat/expire/pexpirerename/renamenxsort/randomkey/restoreexists 語法:exists key [key ...] 檢查一個或多…

React中useDeferredValue與useTransition終極對比。

文章目錄 前言一、核心差異對比二、代碼示例對比1. useDeferredValue&#xff1a;延遲搜索結果更新2. useTransition&#xff1a;延遲路由切換 三、應用場景總結四、注意事項五、原理剖析1. 核心機制對比2. 關鍵差異3. 代碼實現原理 總結 前言 在React的并發模式下&#xff0c…

高并發內存池|定長內存池的設計

二、定長內存池的設計 設計一個定長的內存池&#xff0c;這個內存池的定長在于&#xff0c;當剩余空間使用完畢后&#xff0c;總是開辟相同長度的新空間來使用。我們會使用到一個指針來切割劃分大空間為小空間。大空間是內存池向系統申請的內存大小&#xff0c;而小空間是程序…

微信小程序 自定義圖片分享-繪制數據圖片以及信息文字

一 、需求 從數據庫中讀取頭像&#xff0c;姓名電話等信息&#xff0c;當分享給女朋友時&#xff0c;每個信息不一樣 二、實現方案 1、先將數據庫中需要的頭像姓名信息讀取出來加載到data 數據項中 data:{firstName:, // 姓名img:, // 頭像shareImage:,// 存儲臨時圖片 } 2…

從零開始理解Jetty:輕量級Java服務器的入門指南

目錄 一、Jetty是什么&#xff1f;先看一個生活比喻 二、5分鐘快速入門&#xff1a;搭建你的第一個Jetty服務 步驟1&#xff1a;Maven依賴配置 步驟2&#xff1a;編寫簡易Servlet&#xff08;廚房廚師&#xff09; 步驟3&#xff1a;組裝服務器&#xff08;餐廳開業準備&am…

深入淺出IIC協議 - 從總線原理到FPGA實戰開發 -- 第一篇:I2C總線協議深度解剖

第一篇&#xff1a;I2C總線協議深度解剖 副標題 : 兩根線如何征服千億設備&#xff1f;詳解硬件工程師必須掌握的通信奧義 1. 為什么I2C仍是嵌入式經典&#xff1f; 1.1 總線拓撲的哲學 拓撲對比圖 SPI需4線N片選 vs I2C僅2線級聯 UART點對點 vs I2C多主從架構 成本控制實…

MySQL 索引優化以及慢查詢優化

在數據庫性能優化中&#xff0c;索引優化和慢查詢優化是兩個關鍵環節。合理使用索引可以顯著提高查詢效率&#xff0c;而識別和優化慢查詢則能提升整體數據庫性能。本文將詳細介紹MySQL索引優化和慢查詢優化的方法和最佳實踐。 一、MySQL 索引優化 1.1 索引的基本概念 索引是…

vue使用Pinia實現不同頁面共享token

文章目錄 一、概述二、使用步驟安裝pinia在vue應用實例中使用pinia在src/stores/token.js中定義store在組件中使用store登錄成功后&#xff0c;將token保存pinia中向后端API發起請求時&#xff0c;攜帶從pinia中獲取的token 三、參考資料 一、概述 Pinia是Vue的專屬狀態管理庫…

通俗版解釋CPU、核心、進程、線程、協程的定義及關系

通俗版解釋&#xff08;比喻法&#xff09; 1. CPU 和核心 CPU 一個工廠&#xff08;負責干活的總部&#xff09;。核心 工廠里的車間&#xff08;比如工廠有4個車間&#xff0c;就能同時處理4個任務&#xff09;。 2. 進程 進程 一家獨立運營的公司&#xff08;比如一家…

用 VS Code / PyCharm 編寫你的第一個 Python 程序

用ChatGPT做軟件測試 編寫你的第一個 Python 程序——不只是“Hello, World”&#xff0c;而是構建認知、習慣與未來的起點 “第一行代碼&#xff0c;是一個開發者認知世界的方式。” 編程的入門&#xff0c;不只是運行一個字符串輸出&#xff0c;更是開始用計算機思維來理解、…

amd架構主機構建arm架構kkfileview

修改本機使用鏡像倉庫地址 vim /etc/docker/daemon.json {“experimental”: true, “registry-mirrors”: [ “https://docker.m.daocloud.io”, “https://docker.1panel.live”, “http://mirrors.ustc.edu.cn/”, “http://mirror.azure.cn/”, “https://docker.hpcloud.c…

[Linux] vim及gcc工具

目錄 一、vim 1.vim的模式 2.vim的命令集 (1):命令模式 (2):底行模式 3.vim配置 二、gcc 1.gcc格式及選項 2.工作布置 三、自動化構建工具makefile 1.基本使用方法 2.配置文件解析 3.拓展 在linux操作系統的常用工具中&#xff0c;常用vim來進行程序的編寫&#xff1b…

數據庫3——視圖及安全性

視圖及安全性 學習內容學習感受 學習內容 一、實驗目的與要求&#xff1a; 1、設計用戶子模式 2、根據實際需要創建用戶角色及用戶&#xff0c;并授權 3、針對不同級別的用戶定義不同的視圖&#xff0c;以保證系統的安全性 二、實驗內容&#xff1a; 1、 先創建四類用戶角色&…

Oracle數據庫如何進行冷備份和恢復

數據庫的冷備份指的是數據庫處于關閉或者MOUNT狀態下的備份&#xff0c;備份文件包括數據文件、日志文件和控制文件。數據庫冷備份所用的時間主要受數據庫大小和磁盤I/O性能的影響。由于數據庫需要關閉才能進行冷備份&#xff0c;所以這種備份技術并不適用724小時的系統。盡管冷…

SAP HCM 0008數據存儲邏輯

0008信息類型&#xff1a;0008信息類型是存儲員工基本薪酬的地方&#xff0c;因為很多企業都會都薪酬帶寬&#xff0c;都會按崗定薪&#xff0c;所以在上線前為體現工資體系的標準化&#xff0c;都會在配置對應的薪酬關系&#xff0c;HCM叫間接評估&#xff0c;今天我們就分析下…