VueUse——一个提升开发效率的Vue3工具库,让你早早下班
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工具库,让你早早下班相关推荐
- 提升开发效率的十个工具
Git 之前也有过不少版本控制的工具.有好的,也有糟糕的.不过它们都或多或少地误入歧途了. 这时候Git出现了.一旦你用上了这个神奇的工具,很难相像你还会碰到比它更好的了. 还没用过Git?试一下吧. ...
- 【效率】Launchy一个提高开发效率的小工具
这是一款可以提高开发效率的简单软件,小巧便利,虽然她并不会帮助你提高你的开发能力,但是可以提高你的开发效率,如果你不信就去用用她. 通过这个不太好使,但是不得不去用他的网站百度,如果你有更好用的搜索引 ...
- 提升开发效率的小工具类
1. Collections 首先出场的是java.util包下的Collections类,该类主要用于操作集合或者返回集合,我个人非常喜欢用它 1.1 排序 在工作中经常有对集合排序的需求. 看看使 ...
- order by 影响效率么_提升开发效率N倍的20+命令行神器
图 by:石头@青海湖 关于作者:程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader.以每篇文章都让人有收获为目的,欢迎关注,交流和指导! 背景 本文 ...
- atitit.提升开发效率---mda 软件开发方式的革命
atitit.提升开发效率---mda 软件开发方式的革命 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和其实现相分离 2 3. 目前的问题模型和代码不同步 2 4. MD ...
- 猿创征文|后端开发工程师提升开发效率神器推荐
简介 对于现在的后端工程师来说,并不仅仅局限于编写代码和解决bug,这两个要素了.如果你目前还只是忙碌的写代码和改bug的话,那要深度思考一下,我为什么日复一日的写这些重复代码?这样有何意义?或者说, ...
- 对提升开发效率的总结
做软件开发好几年了,总结下开发经验. 如何提升开发效率: 1.扎实的技术功底 2.强大的学习理解能力 3.丰富的处理经验 4.业务与需求的理解度 扎实的技术功底自然是作为一名优秀的开发人员必不可少的, ...
- idea从零到精通08之IDEA常用插件、提升开发效率
文章目录 作者简介 引言 导航 热门专栏推荐 概述 一.插件安装方式 二.在Idea中无法直接安装插件 三.常用插件 1.ECTranslation 2.Grep Console 3.CodeGlan ...
- 【java】提升开发效率的17个轮子
提升开发效率的17个轮子 前言 1.Collections 1.1.排序 1.2.获取最大值.最小值 1.3.线程转换安全集合 1.4.返回空集合 1.5.二分查找 1.6.转换成不可修改集合 2.C ...
最新文章
- 指令系统寻址方式——指令寻址,数据寻址
- 微信企业号开发之正式版的本地调试
- VS2017无法打开文件MSVCRTD.lib
- NVDKC6416平台H.264算法优化
- shell脚本if中判断大于、小于、等于、不等于的符号
- Android多种样式的进度条
- ina3221嵌入式linux,嵌入式Linux之我行——Linux-2.6.30.4在2440上的移植之文件系统
- HTML5的新特性(1) -pattern
- 计算机组成原理时序电路报告,时序电路实验报告
- 回归预测的评价指标(附python代码)
- c#:使用bing翻译API
- 当当网图书信息数据抓取V1
- 主管都在用项目管理Excel表格模板管理项目
- 界面画好了如何开发软件_如何做儿童类APP?来看英语流利说的实战经验总结!...
- 5G C-V2X技术介绍
- 【易开嵌入式】rt-thread+stm32f407+nandflash,实现RL-FLASHFS文件系统移植
- 陆白_淘宝电商代运营
- 新东方有计算机课么,计算机课程的翻译
- Lpc1768 常见错误及解决方法
- mysql存储过程while循环语句