时隔这么长时间,我把常用的功能整理好了,再来感受VueUse工具库的优雅吧~

简介: 时隔这么长时间,我把常用的功能整理好了,再来感受VueUse工具库的优雅吧~

前言

前段时间我曾经写过一篇文章介绍了一个 VueUse 这个工具库,那个时候只是刚开始用,没有深入了解。经过这么长时间的使用,现在现来谈一下使用感受,体验一下VueUse之美。


VueUse简介

VueUse是一个工具库,里面包含了大量的基于 CompositionAPI的方法。所以在使用之前要对CompositionAPI是什么有一个了解,这样才能更好的去使用它。

简单的来说,这个工具库里面有很多的函数,这些函数都是开箱即用的。

并且在4.0之后,也同样支持Vue2和Vue3两个版本。

github地址:

https://github.com/vueuse/vueuse

官方文档地址:

https://vueuse.org

安装起来也非常的方便:

npm i @vueuse/core

在VueUse中,绝大多数的工具函数都会返回一个可 refs 的对象,你可以使用 ES6的对象解构语法去获取你需要的数据,如下:

import { useMouse } from '@vueuse/core'
// "x" and "y" are refs
const { x, y } = useMouse()
console.log(x.value)
const mouse = useMouse()
console.log(mouse.x.value)

如果你更喜欢用对象风格的属性,你可以把那个refs对象用reactive方法解析一下,如:

import { reactive } from 'vue'
import { useMouse } from '@vueuse/core'
const mouse = reactive(useMouse())
// "x" and "y" will be auto unwrapped, no `.value` needed
console.log(mouse.x)

不仅如此,VueUse还提供了 Componets的使用方式,真可谓是非常的方便,如下:

<script setup>
import { OnClickOutside } from '@vueuse/components'
function close () {
  /* ... */
}
</script>
<template>
  <OnClickOutside @trigger="close">
    <div>
      Click Outside of Me
    </div>
  </OnClickOutside>
</template>

先介绍这么多,总结一句话就是 VueUse的方法可以以 useXXXX的方式使用,也可以用Comoponets的形式使用。更多的介绍可以去官网查看详细的说明


常用功能介绍4edc953e2c684bbe819ffa954c899c08.png

VueUse的功能是很强大的,包含了各个方面,我们平时开发可能用不了这么多功能,所以我们重点说一下几个常用的功能。

浏览器相关

1、useClipboard

2、usefavicon

3、useFullscreen

4、useScriptTag

5、useStyleTag

6、useTitle


传感器相关

1、useNetwork

2、useScroll

3、useSwipe


动画相关

1、useInterval

2、useIntervalFn

3、useNow

4、useTimeout


状态管理


1、useLocalStorage

2、useSessionStorage

3、useStorage


元素相关


1、useDraggable - make elements draggable

2.useElementBounding - reactive bounding box of an HTML element

3、useElementSize - reactive size of an HTML element

4、useElementVisibility - tracks the visibility of an element within the viewport

5、useWindowScroll - reactive window scroll

6、useWindowSize - reactive window size


常用工具

1、useBase64 - reactive base64 transforming

2、useCounter - basic counter with utility functions

3、useDateFormat - get the formatted date according to the string of tokens passed in

4、useDebounceFn - debounce execution of a function

5、useEventBus - a basic event bus


6、useThrottleFn - throttle execution of a function

7、useToggle - a boolean switcher with utility functions

个人感觉大体的常功能应该就这么多,当然,VueUse还有很多很多的工具函数,大家可以去官网查看文档。


源码分析

下面我们以 useClipboard 为例分析一下源码,看看背后到底是怎么做的

先来看一下源码:

function useClipboard(options = {}) {
  const {
    navigator = defaultNavigator,
    read = false,
    source,
    copiedDuring = 1500
  } = options;
  const events = ["copy", "cut"];
  const isSupported = Boolean(navigator && "clipboard" in navigator);
  const text = vueDemi.ref("");
  const copied = vueDemi.ref(false);
  const timeout = shared.useTimeoutFn(() => copied.value = false, copiedDuring);
  function updateText() {
    navigator.clipboard.readText().then((value) => {
      text.value = value;
    });
  }
  if (isSupported && read) {
    for (const event of events)
      useEventListener(event, updateText);
  }
  async function copy(value = vueDemi.unref(source)) {
    if (isSupported && value != null) {
      await navigator.clipboard.writeText(value);
      text.value = value;
      copied.value = true;
      timeout.start();
    }
  }
  return {
    isSupported,
    text,
    copied,
    copy
  };
}

用法如下:

import { useClipboard } from '@vueuse/core'
const source = ref('Hello')
const { text, copy, copied, isSupported } = useClipboard({ source })

读过程

  if (isSupported && read) {
    for (const event of events)
      useEventListener(event, updateText);
  }

如果浏览器支持的话,会监听 `cut` 和  `copy` 两个事件。如果有对应的事件发生,就会从navigator.clipborad中读取复制的内容,然后再赋值给 text 变量。

这样就可以通过 text 暴露出去,我们就可拿到了复制的内容。

写过程

不过有时候我们想在点击某个按钮的时候进行复制操作,同样 这个工具方法也提供了一个 copy 方法供我们使用,让我们在点击的时候进行操作,如下:

<button @click='copy()'>
  <!-- by default, `copied` will be reset in 1.5s -->
  <span v-if='!copied'>Copy</span>
  <span v-else>Copied!</span>
</button>

当执行 copy操作时候,会往navigator.clipboard中写入我们传入的数据。同时这个工具还提供了一个 标志位,是否复制成功。而且在一定的时间后会把这个标识还原到最初的状态。

从这个简单的方法我们可以自由的使用 clipboard的粘贴复制功能。最重要的是短短的一个方法调用就可实现这两个功能,可以说真的很强大。

VueUse的强大之处还有很多很多,github近9K的star 足以说明人们对他的喜欢。

相关文章
|
3月前
|
JSON 数据格式
【Axure高手秘籍】掌握这招,让你的原型设计效率飙升!——元件库导入与使用教程及主流资源下载全解析
【8月更文挑战第20天】Axure RP是界面设计与交互原型制作的强大工具。掌握元件库能显著提升设计效率。元件库包含预设UI元素如按钮、表单等,可直接拖放构建布局。在Axure RP中,通过“元件”选项下的“库”可访问并导入新元件库。导入后,轻松拖放元件至画布调整,甚至自定义样式和交互。利用脚本还能模拟真实交互效果,如按钮点击反馈。推荐资源包括Axure Marketplace、UIZilla等,助力高效设计。
81 0
|
11月前
|
测试技术
【测试平台系列】第一章 手撸压力机(十)-定义场景
上一章,咱们对http请求进行了一些优化,本章节我们将组成场景去运行。首先场景就是一连串的http接口的请求,我们使用list(列表)来组装成一个场景
【测试平台系列】第一章 手撸压力机(十)-定义场景
|
11月前
|
测试技术
【测试平台系列】第一章 手撸压力机(八)- 实现testobject接口
上一章中我们已经启动了一个/engine/run/testObject/接口,但是我们还没有具体的实现该接口,本章我们就来实现一下该接口。
【测试平台系列】第一章 手撸压力机(八)- 实现testobject接口
|
11月前
|
存储 JSON 搜索推荐
【测试平台系列】第一章 手撸压力机(十二)-初步实现提取功能
上一章节,我们主要实现了基础的并发测试场景的能力。本章节,我们实现一下,如何对响应进行提取,使用正则/json对响应信息提取,并赋值给我们定义的变量。
|
11月前
|
测试技术
【测试平台系列】第一章 手撸压力机(九)- 封装函数
将我们的一些代码封装到函数和方法中,这样我们看来代码可读性更好。如果发现bug,也可以更好的进行追踪。
|
数据可视化 数据挖掘 定位技术
ChatGPT神器Code Interpreter终于开放,到底怎么用?这里有一份保姆级教程(3)
ChatGPT神器Code Interpreter终于开放,到底怎么用?这里有一份保姆级教程
194 0
|
机器学习/深度学习 人工智能 数据可视化
ChatGPT神器Code Interpreter终于开放,到底怎么用?这里有一份保姆级教程(1)
ChatGPT神器Code Interpreter终于开放,到底怎么用?这里有一份保姆级教程
284 0
|
数据挖掘 API
ChatGPT神器Code Interpreter终于开放,到底怎么用?这里有一份保姆级教程(2)
ChatGPT神器Code Interpreter终于开放,到底怎么用?这里有一份保姆级教程
175 0
|
uml 开发者 Windows
推荐5款冷门小工具,看一看有没有你喜欢的?
每个人的电脑中都会安装很多软件,可能还保留着很多不为人知的冷门软件。不过虽然冷门,但绝不意味着低能,相反很多冷门软件的功能十分出色。闲话少说,接下来我就给大家推荐5款冷门小工具,看一看有没有你喜欢的。
191 0
推荐5款冷门小工具,看一看有没有你喜欢的?
|
运维 监控 Java
【高效编码】JDK自带的命令行工具的使用还用不清楚的地方?快来看看这篇文章吧!!!
您好,我是码农飞哥,感谢您阅读本文!如果此文对您有所帮助,请毫不犹豫的一键三连吧。小伙伴们有啥想看的,想问的,欢迎积极留言告诉我喔。
151 0
【高效编码】JDK自带的命令行工具的使用还用不清楚的地方?快来看看这篇文章吧!!!
下一篇
无影云桌面