VueUse——一个大大提升开发效率的Vue3工具库,让你早下班

关注微信公众号“前端大侦探”了解更多精彩内容!

前言

VueUse是一个基于 Composition API 实现的基本 Vue 组合实用函数的集合。

VueUse可能是受到了react-use的启发,可以看做是vue版的hook,Vue Compostion API支持了更好的逻辑分离,让这些常用的工具可以被复用,能够让你快速地构建丰富的应用,大大地提高你的开发效率在,避免自己去封装一些常用的功能函数,比如:防抖,节流,定时器等。

几天前,一个偶然的机会发现看到Element-plus组件库的源码中已经大量的使用了VueUse,所以可以大胆地在项目中使用了。

官网地址:https://vueuse.org/

一、特征

无缝迁移:同时支持Vue2和Vue3
支持按需引入:只取你想要的
强类型:用 TypeScript 编写,带有 TS Docs
灵活:可配置的事件过滤器
无需打包:支持CDN方式引入使用
功能丰富:截止目前180+功能任你选择
友好的SSR:与服务器端渲染/生成完美配合
互动演示:功能文档还附带互动演示
附加插件:支持Router、Firebase、RxJS等多种插件

二、安装

命令安装

npm

npm i @vueuse/core

yarn

yarn add @vueuse/core

CDN引入

<script src="https://unpkg.com/@vueuse/shared"></script>
<script src="https://unpkg.com/@vueuse/core"></script>

作为 window.VueUse 暴露给全局。

三、使用

VueUse里面功能非常的丰富,可能并不是每一功能函数我们都能用到,所以我们用到哪一个功能函数在组件中按需引入就可以了。比如:下面我们就结合代码介绍几个常用的功能函数的使用方法。

1、useMouse——获取鼠标位置

useMouse是一个实时监听鼠标位置变化并返回当前鼠标位置坐标x,y的一个方法。

先看useMouse的类型声明:

export interface MouseOptions extends ConfigurableWindow {// 鼠标的位置是相对页面还是浏览器,默认是页面type?: "page" | "client"// 监听 `touchmove` 事件,用于移动端,默认truetouch?: boolean// 触发`touchend`事件时重置为初始值,默认falseresetOnTouchEnds?: boolean// 可以设置初始值initialValue?: Position
}
// 源类型是鼠标还触摸
export declare type MouseSourceType = "mouse" | "touch" | nullexport declare function useMouse(options?: MouseOptions): {x: Ref<number>y: Ref<number>sourceType: Ref<MouseSourceType>
}
export declare type UseMouseReturn = ReturnType<typeof useMouse>

demo代码:

<template><div><p>x的值:{{ x }}</p><p>y的值:{{ y }}</p></div>
</template><script lang="ts" setup>import { useMouse } from '@vueuse/core';const { x, y } = useMouse({type: 'page',touch: true,resetOnTouchEnds: false,initialValue: {x: 100,y: 200}})
</script>

效果图:

2、useCounter——具有实用功能的基本计数器。

先看useCounter的类型声明:

// options配置类型
export interface UseCounterOptions {min?: numbermax?: number
}
export declare function useCounter(// 初始值initialValue?: number,// 设置最大值最小值options?: UseCounterOptions
): {// 计数器count: Ref<number>// 递增函数方法,方法里面可以传计数器步长,接受整数,小数,负数inc: (delta?: number) => number// 递减函数方法,方法里面可以传计数器步长,接受整数,小数,负数dec: (delta?: number) => numberget: () => number// 设置计数器set: (val: number) => number// 重置计数器reset: (val?: number) => number
}

demo代码:

<template><div><p>Count: {{ count }}</p><button @click="inc()">Increment</button><button @click="dec()">Decrement</button><button @click="inc(5.5)">Increment (+5.5)</button><button @click="dec(5)">Decrement (-5)</button><button @click="set(100)">Set (100)</button><button @click="reset()">Reset</button></div>
</template><script setup lang="ts">import { useCounter } from '@vueuse/core';const { count, inc, dec, set, reset } = useCounter(1)
</script>

效果图:

3、useLocalStorage、useStorage——响应式本地化存储,用作本地数据持久化。

默认情况下,useStorage 会根据提供的默认值的数据类型智能地使用相应的序列化器。 例如,JSON.stringify / JSON.parse 将用于对象,Number.toString / parseFloat 用于数字等。也就是说,之前使用
localStorage/sessionStorage存储一个对象时,我们要自己给这个对象使用JSON.stringify进行序列化,现在使用useLocalStorage会根据我们传入的数据类型自动的给我们序列化。

useLocalStorage、useSessionStorage、useStorage它们的用法都是一样的。

demo代码:

<template><div><p>名称:{{ state.name }}</p><p>定位:{{ state.type }}</p><p>阵营:{{ state.camp }}</p><button @click="handleLocalStorage">UseLocalStorage</button><button @click="handleReset">Reset</button></div>
</template><script setup lang="ts">
import { useLocalStorage } from '@vueuse/core';const state = useLocalStorage('my-lol', {name: '泰达米尔',type: '战士',camp: '弗雷尔卓德'
})// 如果没有初始值时,可以设置null
// const state = useLocalStorage('my-lol', null)const handleLocalStorage = () => {// 给LocalStorage my-lol重新赋值state.value = {name: '深渊巨口',type: '射手',camp: '虚空之地'}
}
// 删除LocalStorage my-lol的值
const handleReset = () => {state.value = null
}
</script>

useStorage默认为localStorage。

import { useStorage } from '@vueuse/core'// 对象类型
const state = useStorage('my-store', { hello: 'hi', greeting: 'Hello' })// 布尔类型
const flag = useStorage('my-flag', true) // 数字类型
const count = useStorage('my-count', 0) // 使用sessionStorage
const id = useStorage('my-id', 'some-string-id', sessionStorage) // 删除某个key值
state.value = null

4、useDebounceFn——防抖

当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时。

demo代码:

<template><p> {{ counter }}</p><button @click="clickedFn">UseDebounceFn</button>
</template><script setup lang="ts">import { ref } from 'vue'import { useDebounceFn } from '@vueuse/core'const counter = ref(0)// 第三个参数为最大等待时间,类似于 lodash debounceconst debouncedFn = useDebounceFn(() => {counter.value += 1}, 1000, { maxWait: 5000 })const clickedFn = () => {debouncedFn()}
</script>

5、useTitle

设置网页的title,是对document.title的封装。

demo代码:

<template><p>{{ title }}</p>
</template><script setup lang="ts">
import { ref, computed } from 'vue';
import { useTitle } from '@vueuse/core';const name = ref('Hello');
// 动态监听title的变化
const title = computed(() => {return `${name.value}--Hello`;
})useTitle(title); // Hello--Hello
name.value = 'Hi'; // Hi--World
</script>

useTitle的源码解析:

MaybeRef是一个类型工具

type MaybeRef<T> = Ref<T> | T

在VueUse中大量的使用了MaybeRef来支持可选择性的响应式参数。

import { ref, watch } from 'vue';
import { MaybeRef } from '@vueuse/core';export function useTitle(newTitle: MaybeRef<string | null | undefined>
) {const title = ref(newTitle || document.title);watch(title, (t) => {if(t != null) {document.title = t}}, { immediate: true })return title
}

后记

因为VueUse的功能函数很多,这里我们简单介绍了几个常用的函数,更多的功能大家可以到VueUse官方网站去学习使用。本人这在学习使用中,写的不恰当的地方可以指出,大家一起学习。更多精彩内容可以扫码下方二维码关注本人微信公众号“前端大侦探”!

VueUse——一个提升开发效率的Vue3工具库,让你早早下班相关推荐

  1. 提升开发效率的十个工具

    Git 之前也有过不少版本控制的工具.有好的,也有糟糕的.不过它们都或多或少地误入歧途了. 这时候Git出现了.一旦你用上了这个神奇的工具,很难相像你还会碰到比它更好的了. 还没用过Git?试一下吧. ...

  2. 【效率】Launchy一个提高开发效率的小工具

    这是一款可以提高开发效率的简单软件,小巧便利,虽然她并不会帮助你提高你的开发能力,但是可以提高你的开发效率,如果你不信就去用用她. 通过这个不太好使,但是不得不去用他的网站百度,如果你有更好用的搜索引 ...

  3. 提升开发效率的小工具类

    1. Collections 首先出场的是java.util包下的Collections类,该类主要用于操作集合或者返回集合,我个人非常喜欢用它 1.1 排序 在工作中经常有对集合排序的需求. 看看使 ...

  4. order by 影响效率么_提升开发效率N倍的20+命令行神器

    图 by:石头@青海湖 关于作者:程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader.以每篇文章都让人有收获为目的,欢迎关注,交流和指导! 背景 本文 ...

  5. atitit.提升开发效率---mda 软件开发方式的革命

    atitit.提升开发效率---mda 软件开发方式的革命 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和其实现相分离 2 3. 目前的问题模型和代码不同步 2 4. MD ...

  6. 猿创征文|后端开发工程师提升开发效率神器推荐

    简介 对于现在的后端工程师来说,并不仅仅局限于编写代码和解决bug,这两个要素了.如果你目前还只是忙碌的写代码和改bug的话,那要深度思考一下,我为什么日复一日的写这些重复代码?这样有何意义?或者说, ...

  7. 对提升开发效率的总结

    做软件开发好几年了,总结下开发经验. 如何提升开发效率: 1.扎实的技术功底 2.强大的学习理解能力 3.丰富的处理经验 4.业务与需求的理解度 扎实的技术功底自然是作为一名优秀的开发人员必不可少的, ...

  8. idea从零到精通08之IDEA常用插件、提升开发效率

    文章目录 作者简介 引言 导航 热门专栏推荐 概述 一.插件安装方式 二.在Idea中无法直接安装插件 三.常用插件 1.ECTranslation 2.Grep Console 3.CodeGlan ...

  9. 【java】提升开发效率的17个轮子

    提升开发效率的17个轮子 前言 1.Collections 1.1.排序 1.2.获取最大值.最小值 1.3.线程转换安全集合 1.4.返回空集合 1.5.二分查找 1.6.转换成不可修改集合 2.C ...

最新文章

  1. 指令系统寻址方式——指令寻址,数据寻址
  2. 微信企业号开发之正式版的本地调试
  3. VS2017无法打开文件MSVCRTD.lib
  4. NVDKC6416平台H.264算法优化
  5. shell脚本if中判断大于、小于、等于、不等于的符号
  6. Android多种样式的进度条
  7. ina3221嵌入式linux,嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之文件系统
  8. HTML5的新特性(1) -pattern
  9. 计算机组成原理时序电路报告,时序电路实验报告
  10. 回归预测的评价指标(附python代码)
  11. c#:使用bing翻译API
  12. 当当网图书信息数据抓取V1
  13. 主管都在用项目管理Excel表格模板管理项目
  14. 界面画好了如何开发软件_如何做儿童类APP?来看英语流利说的实战经验总结!...
  15. 5G C-V2X技术介绍
  16. 【易开嵌入式】rt-thread+stm32f407+nandflash,实现RL-FLASHFS文件系统移植
  17. 陆白_淘宝电商代运营
  18. 新东方有计算机课么,计算机课程的翻译
  19. Lpc1768 常见错误及解决方法
  20. mysql存储过程while循环语句

热门文章

  1. 一个成功人士总结的六十条
  2. 模仿新浪手机频道焦点广告图片切换的代码
  3. 如何击垮面试官心理防线:放下戒备,听你吹
  4. 中国联通虚商用户接近1800万:试点模组套餐转售模式
  5. HTML+CSS笔记4
  6. 沟通:多技能、学习能力、泛化能力的重要性
  7. python在哪些省份加入高考加分项目_2019高考报名各省份政策最新 哪些考生可获得高考加分...
  8. 惊艳!华为折叠屏5G手机Mate X发布,称3秒下载1GB视频
  9. 《msdn开发精选》“高性能Web开发技术”网上聊天活动
  10. Windows客户端开发简介(二)