当前位置: 首页 > news >正文

VueUse的使用

VueUse的使用

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

一、安装与按需引入

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

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

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

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

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

  • 进入页面临时改标题
  • 拖拽时高亮区域
  • 松手后调接口并防抖
  • 上传结果写入本地缓存,刷新可恢复列表
<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><divref="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

http://www.dtcms.com/a/605275.html

相关文章:

  • 【LeetCode】111. 二叉树的最小深度
  • 如何将html发布到网站wordpress用户筛选
  • 深度智能体-智能体加强版
  • ZCC75XXH- 40V/150mA 高压线性稳压器替代HT75XX
  • 多媒体语音通话中,信令参数T1/ms, T2/s, T4/s作用
  • Travel uni-app 项目说明
  • 永磁同步电机无速度算法--基于一阶线性状态观测器的反电动势观测器
  • 番禺网站建设怎样网站建设公司怎样做账
  • 网站开发项目总结模板网站开发 证书
  • Python 自定义迭代器 --以斐波那契数列为例
  • AI一键PPT 2.0.3 一键智能生成
  • 232. 用栈实现队列
  • 如何在桌面创建网页快捷图标?(电脑 / 手机通用操作指南)
  • soular实战教程系列(2) - 如何统一管理TikLab帐号体系
  • k8s 发行说明(版本)
  • 批处理病毒原理、防御
  • 网站建设对企业的好处有哪些嘉兴网站制作建设
  • 几大网站类型网站建设所需人员
  • KAFKA自动修改所有以**开头的主题脚本
  • 记录生活系统|记录美好|健康管理|基于java+Android+微信小程序的记录生活系统设计与实现(源码+数据库+文档)
  • PHP Calendar
  • 用 Kafka 打通实时数据总线Flink CDC Pipeline 的 Kafka Sink 实战
  • Podman讲解
  • PHP EOF (Heredoc)
  • Spring Boot集成Kafka:最佳实践与详细指南
  • 【运维】Docker 入门
  • 手机网站的尺寸做多大的如何搭建wordpress商城
  • 百度商桥绑定网站正规的关键词优化软件
  • F280049C学习笔记之CMPSS
  • linux系统学习(10.shell基础)