VueUse的使用

VueUse的使用

VueUse 是基于 Vue 3 Composition API 封装的"工具函数"集合,被社区称为"Vue 瑞士军刀"。它把项目中反复出现的逻辑(本地存储、鼠标位置、防抖节流、剪贴板、全屏、息屏检测......)全部做成"可组合函数(Composable)",直接在 setup() 里 import 就能用,无需再自己写一堆样板代码。

一、安装与按需引入

  1. 安装核心包
bash 复制代码
npm i @vueuse/core
# 如需要音效、动画、路由等再装对应扩展包
npm i @vueuse/sound @vueuse/motion @vueuse/router
  1. 按需引入
js 复制代码
// 只拿需要的函数
import { useMouse, useLocalStorage, useDebounceFn } from '@vueuse/core'

二、10 行代码就能跑起来的 6 个高频场景

需求 关键 API 最小可运行片段
1. 实时鼠标坐标 useMouse const { x, y } = useMouse() 直接绑定模板 {``{ x }},{``{ y }}
2. 本地存储双向绑定 useStorage const name = useStorage('uname', 'tom') 输入框 v-model="name" 刷新仍保存
3. 按钮防抖 useDebounceFn const submit = useDebounceFn(() => api(), 500) 快速点击只执行 1 次
4. 元素是否进可视区 useElementVisibility const target = ref(); const isShow = useElementVisibility(target) 做"懒加载/埋点"利器
5. 一键复制 useClipboard const { copy, isSupported } = useClipboard() copy('文本') 自动兼容旧浏览器
6. 页面标题动态化 useTitle useTitle computed(()=> 未读${count} 条消息) 微信未读红点同款

三、进阶:组合多个函数做业务

需求:做一个"拖拽上传"区域,要求

  • 进入页面临时改标题
  • 拖拽时高亮区域
  • 松手后调接口并防抖
  • 上传结果写入本地缓存,刷新可恢复列表
vue 复制代码
<script setup>
import { ref, computed } from 'vue'
import {
  useTitle, useDropZone, useDebounceFn, useLocalStorage
} from '@vueuse/core'

// 1. 标题
useTitle(computed(() =>
  files.value.length ? `已选 ${files.value.length} 个文件` : '拖拽上传 Demo'
))

// 2. 列表 + 缓存
const files = useLocalStorage('upload-files', [])

// 3. 拖拽区域
const dropRef = ref()
const { isOverDropZone } = useDropZone(dropRef, (droppedFiles) => {
  upload(droppedFiles.map(f => f.name))
})

// 4. 防抖上传
const upload = useDebounceFn((newFiles) => {
  // 模拟接口
  files.value = [...files.value, ...newFiles]
}, 600)
</script>

<template>
  <div
    ref="dropRef"
    class="box"
    :class="{ active: isOverDropZone }"
  >
    把文件拖进来(已缓存 {{ files.length }} 个)
  </div>
</template>

<style scoped>
.box { border: 2px dashed #ccc; padding: 40px; }
.active { border-color: #42b883; background: #f0f9ff; }
</style>

上面 30 行代码即完成"标题变化 + 拖拽高亮 + 防抖上传 + 本地缓存"完整链路,无需手动 addEventListener、setTimeout、localStorage.setItem

相关推荐
程序员黑豆7 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
To_OC8 小时前
踩了个 TS 的坑之后,我终于把 type 和 interface 掰明白了
前端·react.js·typescript
GreenTea8 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
浮生望8 小时前
前端API工程化:用 Mock 数据与 Axios 配置实现独立于后端的并行开发
前端
万少9 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
波波0079 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
Brown.alexis10 小时前
es6知识点1-自备使用
前端·ecmascript·es6
小爬的老粉丝11 小时前
JavaScript 纯前端预览 WPS:先识别容器,再路由解析器
前端·javascript·wps
计算机魔术师11 小时前
新兴多智能体系统的模式与问题
前端
用户0595401744612 小时前
AI Agent 上下文污染踩坑实录:用 pytest + Redis 揪出 3 类记忆串号 bug,排查 6 小时
前端·css