Vue 3 使用 VueUse,让代码更优雅、开发更高效!


前言

VueUse 是一个基于 Vue 3 Composition API 的工具函数集合,它提供了大量实用的功能,能够极大地提升 Vue 3 的开发效率。无论你是 Vue 新手还是经验丰富的开发者,VueUse 都能为你带来惊喜。

官方地址:https://vueuse.pages.dev/guide/

在这里插入图片描述


一、 VueUse 的优势

  • 开箱即用: VueUse 提供了超过 200 个函数,涵盖了状态管理、DOM 操作、动画、网络请求等各种场景,无需重复造轮子。

  • Composition API: 基于 Composition API 设计,可以更好地组织代码逻辑,提升代码的可读性和可维护性。

  • TypeScript 支持: 提供了完善的 TypeScript 类型定义,代码提示更加友好。

  • 轻量级: 按需引入,不会对项目体积造成负担。

  • 活跃的社区: 拥有活跃的社区和详细的文档,学习和使用都非常方便。

二、 VueUse 的使用

  1. 安装:
npm install @vueuse/core
  1. 引入:
import {
    
     useMouse, useLocalStorage } from '@vueuse/core'
  1. 使用:
export default {
    
    
  setup() {
    
    
    // 获取鼠标位置
    const {
    
     x, y } = useMouse()

    // 使用 localStorage
    const storage = useLocalStorage('my-storage', {
    
    
      name: 'VueUse',
    })

    return {
    
    
      x,
      y,
      storage,
    }
  },
}

三、 VueUse 常用函数推荐

  • 状态管理: useStorage, useLocalStorage, useSessionStorage

  • DOM 操作: useMouse, useEventListener, useResizeObserver

  • 动画: useTransition, useSpring

  • 网络请求: useFetch, useAxios

  • 工具函数: useDebounceFn, useThrottleFn, useInterval

3.1 状态管理

VueUse 提供了多种状态管理工具,可以轻松实现数据的响应式绑定与持久化。

  1. useLocalStorage
    将数据绑定到 localStorage,实现持久化和响应式。
import {
    
     useLocalStorage } from '@vueuse/core';

// 使用 localStorage 存储用户主题偏好,默认为 "light"
const theme = useLocalStorage('theme', 'light');

// 更新值时,localStorage 会自动更新
theme.value = 'dark'; // localStorage["theme"] = "dark"

// 监听主题变化,响应式更新
watch(theme, (newValue) => {
    
    
  console.log(`主题切换为:${
      
      newValue}`);
});

  1. useSessionStorage
    与 useLocalStorage 类似,但数据保存在会话中,关闭浏览器后失效。
import {
    
     useSessionStorage } from '@vueuse/core';

// 会话级存储,页面关闭后失效
const sessionData = useSessionStorage('session', {
    
     user: '快乐就是哈哈哈' });

sessionData.value.user = '你好'; // 更新值

3.2 浏览器 API

VueUse 提供了多种封装良好的浏览器 API,便于操作。

  1. useWindowSize
    动态监听浏览器窗口大小。
import {
    
     useWindowSize } from '@vueuse/core';

const {
    
     width, height } = useWindowSize();

watchEffect(() => {
    
    
  console.log(`窗口大小:${
      
      width.value} x ${
      
      height.value}`);
});

  1. useClipboard
    用于读取和操作剪贴板内容。
import {
    
     useClipboard } from '@vueuse/core';

const {
    
     text, copy, isSupported } = useClipboard();

// 检查是否支持剪贴板功能
if (isSupported) {
    
    
  copy('VueUse 是强大的工具集!'); // 复制文本
  console.log('已复制到剪贴板');
}

通过 VueUse 操作 DOM 元素更加简单高效。

3.3 DOM 操作

  1. useElementSize
    监听 HTML 元素大小。
import {
    
     ref } from 'vue';
import {
    
     useElementSize } from '@vueuse/core';

const elementRef = ref(null);
const {
    
     width, height } = useElementSize(elementRef);

watchEffect(() => {
    
    
  console.log(`元素宽度:${
      
      width.value}px,高度:${
      
      height.value}px`);
});


  1. useDraggable
    让元素支持拖拽功能。
import {
    
     ref } from 'vue';
import {
    
     useDraggable } from '@vueuse/core';

const elementRef = ref(null);
useDraggable(elementRef); // 让该元素可拖拽

3.4 时间管理

时间相关的 API 提供了实时功能支持。

  1. useTimestamp
    实时获取时间戳。
import {
    
     useTimestamp } from '@vueuse/core';

const timestamp = useTimestamp();

watchEffect(() => {
    
    
  console.log(`当前时间戳:${
      
      timestamp.value}`);
});

  1. useNow
    获取当前时间。
import {
    
     useNow } from '@vueuse/core';

const now = useNow();

watchEffect(() => {
    
    
  console.log(`当前时间:${
      
      now.value.toLocaleString()}`);
});

3.5 动画与交互

VueUse 提供了与动画和交互相关的工具。

  1. useIntersectionObserver
    检测元素是否在视口中,我们可以借此实现懒加载、滚动触发动画等效果
import {
    
     ref } from 'vue';
import {
    
     useIntersectionObserver } from '@vueuse/core';

const elementRef = ref(null);
const {
    
     isIntersecting } = useIntersectionObserver(elementRef, ([entry]) => {
    
    
  console.log('元素是否可见:', entry.isIntersecting);
});

3.6 网络请求

  1. useFetch
    封装了网络请求的响应式处理。
import {
    
     useFetch } from '@vueuse/core';

const {
    
     data, error, isFetching } = useFetch('https://这是一个链接').json();

watchEffect(() => {
    
    
  if (isFetching.value) {
    
    
    console.log('请求中...');
  } else if (error.value) {
    
    
    console.error('请求失败:', error.value);
  } else {
    
    
    console.log('请求成功:', data.value);
  }
});

四、 总结

VueUse 是一个非常实用的工具库,它能够帮助我们更高效地开发 Vue 3 应用。如果你还没有尝试过 VueUse,强烈建议你将它加入到你的开发工具箱中,相信它会给你带来惊喜!