Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >时隔这么长时间,我把常用的功能整理好了,再来感受VueUse工具库的优雅吧~

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

作者头像
用户9078190
发布于 2022-10-28 11:07:47
发布于 2022-10-28 11:07:47
3.3K00
代码可运行
举报
文章被收录于专栏:知码前端知码前端
运行总次数:0
代码可运行

01

前言

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

02

VueUse简介

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

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

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

github地址:

https://github.com/vueuse/vueuse

官方文档地址:

https://vueuse.org

安装起来也非常的方便:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm i @vueuse/core

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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方法解析一下,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的使用方式,真可谓是非常的方便,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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的形式使用。更多的介绍可以去官网查看详细的说明

03

常用功能介绍

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还有很多很多的工具函数,大家可以去官网查看文档。

03

源码分析

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
  };
}

用法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { useClipboard } from '@vueuse/core'

const source = ref('Hello')
const { text, copy, copied, isSupported } = useClipboard({ source })

读过程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  if (isSupported && read) {
    for (const event of events)
      useEventListener(event, updateText);
  }

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

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

写过程

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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 足以说明人们对他的喜欢。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 知码前端 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
vue3中可以帮助你早点下班的9个开发技巧!
vue3也发布很长时候了,官方也将默认版本切换为vue3,而且也出现了完善的中文文档,不知同志们是否已经使用了了呢?
用户7413032
2022/04/01
1.1K0
vue3中可以帮助你早点下班的9个开发技巧!
VueUse中的这5个函数,也太好用了吧
VueUse 是 Anthony Fu 大佬的一个开源项目,它为Vue的开发者提供了大量用于 Vue2 和Vue3 的基本 Composition API 实用工具函数。
前端小智@大迁世界
2022/06/15
5.1K0
VueUse中的这5个函数,也太好用了吧
实践 Vue3 组件库-基于 VuePress 开发组件文档
这篇我们来搭建一个文档系统,文档系统有很多选择比如 storybook、vuepress、vitepress 或者自建文档。这里选择基于 vuepress 搭建,因为 vuepress 功能完善也容易扩展。后续也会有单独基于 vitepress 的文档系统。
用户6256742
2024/07/16
4110
实践 Vue3 组件库-基于 VuePress 开发组件文档
TDesign CompositionAPI 重构之路
Tdesign-vue-next 的 Composition Api 重构计划 经过了五个月的时间完成对 44 个组件的重构,共有 20 名开发者参与组件重构。
PY
2022/07/17
3930
TDesign CompositionAPI 重构之路
讲几个vueuse的Elements模块里的实用方法
VueUse 是专门为 Vue 打造的工具库,它提供了监听页面元素的各种行为、调用浏览器提供的蓝牙、定位、摄像头、连接游戏手柄等能力,适用于 Vue2 和 Vue3。
德育处主任
2024/01/24
5960
讲几个vueuse的Elements模块里的实用方法
5 个可以加速开发的 VueUse 库函数
VueUse 是 Anthony Fu 的一个开源项目,它为 Vue 开发人员提供了大量适用于 Vue 2 和 Vue 3 的基本 Composition API 实用程序函数。
童欧巴
2021/08/20
2K0
5 个可以加速开发的 VueUse 库函数
项目越写越大,我是这样做拆分的
在几年前的一次 Vue 项目改造中利用原生+H5 的形式按模块菜单来拆分了多个 Vue 项目,在拆分时考虑到多项目维护带来的成本较大,我们将项目公共使用到的资源提升到项目 root 目录下,将子项目抽取为模板通过定制的脚手架创建每个子项目到 modules 下,并且支持单独打包、单独发布。这样项目结构的好处同时避免了项目庞大带来的首屏加载时间长,也避免了多人开发出现冲突的造成的矛盾。
前端小鑫同学
2022/12/26
2.7K0
项目越写越大,我是这样做拆分的
极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图
Vue Flow的入门门槛要高不少,毕竟找不到中文文档,反正我是不太喜欢看纯英文的文档的。不过没关系,看完这篇还用不好Vue Flow请来找我麻烦。
watermelo37
2025/01/22
2.2K0
极致的灵活度满足工程美学:用Vue Flow绘制一个完美流程图
JS浏览器环境下各种实用API记录
Clipboard API 是下一代的剪贴板操作方法,比传统的document.execCommand()方法更强大、更合理。
房东的狗丶
2023/02/17
9010
Vue3开发最佳实践和实用技巧(上)
上面我们发现 number 类型竟然书写了两次,我们可以单独抽离成一个类型方便复用
PHP开发工程师
2022/08/20
1.6K0
20个惊艳的React组件库,每一个都值得收藏(下)
在上一篇文章中,20个惊艳的React组件库,每一个都值得收藏(上),我们一起探索了10款令人惊艳的React组件库,它们各自以独特的功能和优势,极大地丰富了我们的React开发工具箱。今天,我们将继续这一系列的分享,从React Markdown到React Copy to Clipboard,为大家介绍另外10个同样值得收藏的React组件库。这些组件库覆盖了从文本处理到布局管理,再到交互增强等多个方面,旨在帮助开发者提升开发效率,打造更加丰富和人性化的应用体验。
前端达人
2024/03/11
1.5K0
20个惊艳的React组件库,每一个都值得收藏(下)
50 个让你高效编程的前端轮子,真香
https://segmentfault.com/a/1190000038589634
@超人
2021/04/26
7.9K0
前端系列12集-全局API,组合式API,选项式API的使用
The setup() hook serves as the entry point for Composition API usage in components in the following cases: 在以下情况下, setup() 钩子用作组件中 Composition API 使用的入口点:
达达前端
2023/10/08
7180
遇到这三个 api,你会把它封装成组件么?
最近遇到一些组件,它们只是对 api 的一层简易封装,用起来也和直接用 api 差不多。
神说要有光zxg
2024/04/17
1660
遇到这三个 api,你会把它封装成组件么?
学习 Vue 3 全家桶 - Vite 和 Composition API
如果在一个页面里有多个功能,那就需要在 data 和 methods 里分别进行配置。但这样的话,数据和方法相关的代码会写在一起,在组件代码行数多了后就不好维护。可以使用 Composition API 的逻辑来拆分代码,把一个功能相关的数据和方法都维护在一起。
Cellinlab
2023/05/17
4470
学习 Vue 3 全家桶 - Vite 和 Composition API
图形编辑器开发:实现图形的复制粘贴
如果只支持粘贴到当前编辑器下,方案很简单:只需要监听 Ctrl + C 键盘事件深拷贝一份选中图形对象,然后再监听 Ctrl + V 事件,将拷贝出来的对象添加到图形树的末尾。
前端西瓜哥
2023/08/18
4640
图形编辑器开发:实现图形的复制粘贴
介绍 Preact Signals
Signals 是用来处理状态的一种方式,它参考自 SolidJS,吸收了其大部分的优点。无论应用多么复杂,它都能保证快速响应。
尹光耀
2022/09/17
9860
介绍 Preact Signals
10个你可能没用过,但很强大的Web API
在本文中,我将介绍 10 个不那么流行的 Web API。不那么流行并不意味着它们没有用处。你可以在项目的各种用例中使用它们。
@超人
2021/05/24
7190
10个你可能没用过,但很强大的Web API
剪贴板操作 Clipboard API 教程
一般来说,脚本不应该改动用户的剪贴板,以免不符合用户的预期。但是,有些时候这样做确实能够带来方便,比如"一键复制"功能,用户点击一下按钮,指定的内容就自动进入剪贴板。
ruanyf
2021/01/21
2.4K0
【译】JavaScript实现文字剪贴板&React版本
目录 怎么使用JavaScript实现一个剪贴 上面的方法不是很完美我们优化一下 思考一个问题 使用react和typescript重写和优化一下 如何使用copyme 原文参考 写在最前面 有一
西南_张家辉
2021/02/02
5620
相关推荐
vue3中可以帮助你早点下班的9个开发技巧!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验