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

前端小食堂 | Day15 - VueUse 魔法道具库

🧰 今日宝箱:30+ 效率神器一键获取

1. 响应式操控の六脉神剑
// 🎮 鼠标跟踪  
const { x, y } = useMouse()  

// 🌐 网络状态感知  
const { isOnline, offlineAt } = useNetwork()  

// 📱 设备检测  
const { isMobile, isTablet } = useDevice()  

// 📏 元素尺寸监听  
const target = ref(null)  
const { width, height } = useElementSize(target)  

// 🕹️ 键盘事件  
const keyPressed = useKeyPress(['ArrowUp', 'ArrowDown'])  

// ⏱️ 计时器  
const { counter, pause, resume } = useInterval(1000)  

2. 状态管理の乾坤袋
// 🌈 本地存储同步  
const state = useStorage('vueuse-demo', { theme: 'light' })  

// 📋 剪贴板操控  
const { copy, copied } = useClipboard()  

// 🧩 状态共享  
const sharedCount = useSharedState('global-counter', 0)  

// 🎚️ 切换器  
const [isDark, toggleDark] = useToggle(false)  

// 🔄 历史记录  
const { undo, redo, history } = useHistory(state)  

// 🔐 加密存储  
const secureData = useEncryptedStorage('secret', 'initialData', 'myPassword')  

3. 组件辅助の万花筒
// 🕶️ 组件可见性检测  
const isVisible = useElementVisibility(target)  

// 🎯 点击外部关闭  
const modalRef = ref(null)  
useClickOutside(modalRef, () => closeModal())  

// 📜 滚动控制  
const { y: scrollY } = useWindowScroll()  
useScrollLock(true) // 锁定滚动  

// 🖼️ 图片懒加载  
const imgRef = ref(null)  
useImageLazyLoad(imgRef, { placeholder: '/loading.gif' })  

// 🔍 元素悬停检测  
const isHovered = useElementHover(target)  

// 📌 动态标题  
useTitle('新消息 (3) - VueUse魔法屋')  

4. 动画与交互の幻影术
// 🚀 请求加载动画  
const { isLoading, start, stop } = useLoadingBar()  

// 🎞️ 过渡动画  
const currentValue = useTransition(0, { duration: 1000 })  

// 🎮 游戏手柄支持  
const { isConnected, buttonState } = useGamepad()  

// 🎧 音频控制  
const { play, pause } = useAudio('/notification.mp3')  

// ⌨️ 输入防抖  
const debouncedSearch = useDebounce(searchText, 500)  

// 🧪 Web Worker 集成  
const { data, run } = useWebWorker('/heavy-task.js')  

❄️ 冷知识:魔法道具组合技

// 🌟 智能搜索组件  
const search = ref('')  
const results = ref([])  

// 组合:防抖 + 网络请求 + 加载状态  
const { debounced: debouncedSearch } = useDebounce(search, 300)  
const { data, isFetching } = useFetch(  
  () => `/api/search?q=${debouncedSearch.value}`,  
  { immediate: false }  
)  

watch(debouncedSearch, val => {  
  if (val) execute()  
})  

// 自动同步结果  
watchEffect(() => results.value = data.value?.items || [])  

🌟 实验室魔法工坊

实现拖拽排序功能

<template>  
  <div  
    v-for="item in list"  
    :key="item.id"  
    ref="items"  
    class="draggable-item"  
  >  
    {{ item.text }}  
  </div>  
</template>  

<script setup>  
import { useDraggable } from '@vueuse/core'  

const items = ref([])  
const list = ref([...]) // 初始列表  

useDraggable(items, {  
  onMove({ target, newIndex }) {  
    // 交换数组元素  
    const oldIndex = list.value.findIndex(i => i.id === target.dataset.id)  
    const newList = [...list.value]  
    newList.splice(newIndex, 0, newList.splice(oldIndex, 1)[0])  
    list.value = newList  
  },  
  animation: 200  
})  
</script>  

明日秘境:《前端监控の天眼通——错误追踪与性能分析》 👁️
(留言告诉我你最想实现的炫酷功能,本魔法工匠为你打造专属代码!⚡)


🛎️ 本日避坑指南

  1. 按需引入减少体积
// ❌ 错误引入方式  
import { useMouse } from '@vueuse/core'  

// ✅ 正确姿势(自动Tree Shaking)  
import { useMouse } from '@vueuse/core'  
// 或使用独立包  
import { useMouse } from '@vueuse/core/useMouse'  
  1. SSR兼容性问题
// 服务端渲染时需条件引入  
if (process.client) {  
  const { x, y } = useMouse()  
}  
  1. 内存泄漏预防
// 自动清理的智能事件  
const cleanup = useEventListener('resize', callback)  
onUnmounted(() => cleanup())  
  1. TypeScript支持
// 自定义类型推断  
interface User { name: string }  
const user = useStorage<User>('user', { name: '小明' })  

🔮 30+ 神器速查表

分类神器列表(精选30)
响应式useMouse useStorage useDebounce useThrottle useInterval
DOMuseElementSize useClickOutside useScroll useDraggable useResizeObserver
设备useDevice useNetwork useGeolocation useBattery useWakeLock
状态useToggle useLocalStorage useSharedState useHistory useCounter
动画useTransition useRafFn useInterval useTimeout useTimestamp
高级useWebWorker useFetch useImage useWebSocket useEventSource

(完整清单详见VueUse官方文档 🔗)

相关文章:

  • 【NLP 40、残差神经网络】
  • Windows下安装MongoDB 8
  • 【数据分析】读取文档(读取Excel)
  • Flux 文生图技术解析与部署实践
  • Python 魔法方法介绍
  • 网络安全常识科普(百问百答)
  • 每日Attention学习26——Dynamic Weighted Feature Fusion
  • 双指针算法专题之——有效三角形的个数
  • 《Python深度学习》第二讲:深度学习的数学基础
  • 老牌软件,方便处理图片,量大管饱。
  • 4大观点直面呈现|直播回顾-DeepSeek时代的AI算力管理
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(35)山河社稷图展开 - 编辑距离(字符串DP)
  • 向量数据库技术系列二-Milvus介绍
  • 【linux篇】--linux常见指令
  • 简单爬虫--框架
  • [蓝桥杯 2023 省 A] 买瓜 --暴力DFS+剪枝优化
  • L1-078 吉老师的回归(C++)
  • 202503执行jmeter压测数据库(ScyllaDB,redis,lindorm,Mysql)
  • 前缀和的例题
  • 麒麟系统使用-安装 SQL Developer
  • 网站选项按钮/哈尔滨百度搜索排名优化
  • 宁夏网站建设优化/百度一下首页网址
  • 网站建设 2018/百度搜索推广收费标准
  • 云南住房和城乡建设厅网站/关键词排名批量查询软件
  • 广州天河做网站/抖音搜索seo
  • 餐饮加盟手机网站建设/个人接app推广单去哪里接