实用的vueuseHooks,提高编码效率

文章目录

        • 写在前面
        • vueuse 官网
        • 安装
        • Hooks
          • useStorage [地址](https://vueuse.org/core/useStorage/)
            • 传统方法数据持久化 举例子
            • 传统持久化的弊端
            • useStorage 数据持久化 举例子
            • 使用useStorage 更改存储数据
            • 使用useStorage 删除存储数据
          • useScriptTag [地址](https://vueuse.org/core/useScriptTag/)
            • jQuery举例子
            • useScriptTag加载 jQuery
          • useDraggable [地址](https://vueuse.org/core/useDraggable/)
          • useOnline [地址](https://vueuse.org/core/useOnline/)
        • 写到后面

写在前面

今天写一下关于 vueuse中常用的 Hooks 功能函数,使用之后可以提高我们的开发效率,同时 bug 率也会降低,该文章只做基础用法,具体的 api 详细的各种操作,可以参考官网,根据自己的需要进行使用。

vueuse 官网

官网

安装
npm i @vueuse/core
Hooks
useStorage 地址

这个是用来操作本地存储,做数据持久化操作的,该方法替代了我们常用的localStorage和sessionStorage

传统方法数据持久化 举例子
// 本地 mock 数据
const useMockData = {
    id: 0,
    url: "www.baidu.com",
    userInfo: {
        name: "Kim",
        age: 20
    }
}
// TODO: 传统本地持久化存储方式
localStorage.setItem('mockLocalData', useMockData)
// TODO: 传统会话存储方式
sessionStorage.setItem('mockLocalData', useMockData)

// TODO: 传统获取本地持久化数据
const getLocalData = localStorage.getItem('mockLocalData')
console.log('getLocalData', getLocalData) // getLocalData [object Object]

// TODO: 传统获取本地会话数据
const getSessionData = sessionStorage.getItem('mockLocalData');
console.log('getSessionData', getSessionData) //getSessionData [object Object]

如果我们使用传统的方法进行数据持久化处理,当源数据是基本数据类型的时候,是可以直接进行存储的,但是如果我们的数据是一个对象或者复杂的数据类型,就无法直接进行存储,需要进行序列化的处理,比如下面的处理

// TODO: 传统本地持久化存储方式
localStorage.setItem('mockLocalData',  JSON.stringify(useMockData))
// TODO: 传统会话存储方式
sessionStorage.setItem('mockLocalData', JSON.stringify(useMockData))

// TODO: 传统获取本地持久化数据
const getLocalData = JSON.parse(localStorage.getItem('mockLocalData')) 
console.log('getLocalData', getLocalData) // getLocalData {id: 0, url: 'www.baidu.com', userInfo: {…}}

// TODO: 传统获取本地会话数据
const getSessionData = JSON.parse(sessionStorage.getItem('mockLocalData'));
console.log('getSessionData', getSessionData) //getSessionData {id: 0, url: 'www.baidu.com', userInfo: {…}}

出现这种现象的原因是:在JavaScript中,当你尝试将对象直接转换为字符串时,会调用对象的toString()方法。如果对象没有自定义的toString()方法,那么默认的Object对象的toString()方法会被调用,返回"[object Object]"作为字符串表示。

传统持久化的弊端
  • 复杂数据类型需要序列化处理,否则无法完成数据的存储和读取
  • 更改缓存的时候需要重新进行存储
useStorage 数据持久化 举例子
import { useStorage } from '@vueuse/core';

// 本地 usecore mock 数据
const useCoreMockData = {
    id: 0,
    url: "www.baidu.com",
    userInfo: {
        name: "Kim",
        age: 20
    }
}
// TODO: 使用 useStorage 进行本地持久化存储
const useCoreLocalData = useStorage('useCoreMockData', useCoreMockData)
// 等同于 const useCoreLocalData = useStorage('useCoreMockData', useCoreMockData,localStorage)
console.log('useCoreLocalData', useCoreLocalData)

// TODO: 使用 useStorage 进行会话存储
const useCoreSeesionData = useStorage('useCoreMockData', useCoreMockData, sessionStorage)
console.log('useCoreSeesionData', useCoreSeesionData)

在这里插入图片描述
在这里插入图片描述

可以看到,我们存储数据的时候,本身对复杂数据类型没有做任何处理,直接将数据进行了处理,是完全可以达到传统存储的序列化之后的效果的,另外useStorage默认使用的是localStorage,第三个参数是存储方式,可以选择持久化存储还是会话级存储。

使用useStorage 更改存储数据
// TODO: 点击操作本地数据
const handleUseCoreLocalData = () => {
    useCoreLocalData.value.id = 1
    console.log('useCoreLocalData', useCoreLocalData.value)
}

在这里插入图片描述

使用useStorage 删除存储数据
// TODO: 删除本地存储数据
const removeLocalData = () => { 
    useCoreLocalData.value = null
    console.log('useCoreLocalData', useCoreLocalData.value)
}

在这里插入图片描述

useScriptTag 地址

该标签是用来加载 js 脚本的,比如你在项目中需要使用某个 js,但是这个 js 只能通过 script 标签的方式进行加载使用,那么我们一般是可以在入口文件的时候将该 js 加载出来进行使用,但是这样不是非常的优雅,useScriptTag就是解决这个问题的,比如下面,我们希望使用jQuery的方法获取当前页面的某一个 dom 元素

jQuery举例子
const handleJs = () => {
    const el = $("#content");
    console.log("🚀 clearlove  - Log ~ handleJs ~ el: ", el);
};

在这里插入图片描述

这里肯定是会报错的,因为 jQuery 的脚本不存在,那么$自然也是不可以用的

useScriptTag加载 jQuery
<button @click="handleJs">获取 dom 元素</button>
<h1 id="content">scripttag</h1>
import { useScriptTag } from "@vueuse/core";
const handleJs = () => {
  useScriptTag("https://code.jquery.com/jquery-3.7.1.slim.min.js", () => {
    // 获取 dom 元素
    const el = $("#content");
    console.log("🚀 clearlove  - Log ~ handleJs ~ el: ", el);
  });
};

在这里插入图片描述

可以看到这里就可以直接获取到当前的dom元素,我们也可以按照时机进行加载,具体的可以看文档描述

useDraggable 地址

可以让你自由拖动DOM 元素的Hooks

<template>
  <div>
    <h1 ref="dragDom" :style="style" style="position: fixed">你可以尝试拖动我</h1>
  </div>
</template>
<script setup>
import { ref } from "vue";
import { useDraggable } from '@vueuse/core'
const dragDom = ref(null);

const { x, y, style } = useDraggable(dragDom, {
  initialValue: { x: 140, y: 140 },
})

</script>

在这里插入图片描述

useOnline 地址

判断当前用户的联网情况,还是比较实用的

import { useOnline } from '@vueuse/core'
const online = useOnline()
<template>
  status:{{ online }}
</template>

在这里插入图片描述

写到后面

类似的功能还有很多,这里就不一一列举,感兴趣的可以自行阅读文档即可,这些东西确实可以很大程度的节省开发时间,同时也可以避免我们因为实现某个小功能导致的代码缺陷,还是很有用的!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/757410.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Detailed Steps for Troubleshooting ORA-00600 [kdsgrp1] (文档 ID 1492150.1)

Detailed Steps for Troubleshooting ORA-00600 [kdsgrp1] (文档 ID 1492150.1)​编辑转到底部 In this Document Purpose Troubleshooting Steps References APPLIES TO: Oracle Database - Enterprise Edition Oracle Database Cloud Schema Service - Version N/A and lat…

鸿蒙开发Ability Kit(程序框架服务):【选择申请权限的方式】

选择申请权限的方式 应用在访问数据或者执行操作时&#xff0c;需要评估该行为是否需要应用具备相关的权限。如果确认需要目标权限&#xff0c;则需要在应用安装包中申请目标权限。 每一个权限的权限等级、授权方式不同&#xff0c;申请权限的方式也不同&#xff0c;开发者在…

41割队伍

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/387 题目描述 给定 𝑛n 个数字 𝑎1,�…

MySQL高级-MVCC-基本概念(当前读、快照读)

文章目录 1、MVCC基本概念1.1、当前读1.1.1、创建表 stu1.1.2、测试 1.2、快照读 1、MVCC基本概念 全称Multi-Version Concurrency Control&#xff0c;多版本并发控制。指维护一个数据的多个版本&#xff0c;使得读写操作没有冲突&#xff0c;快照读为MySQL实现MVCC提供了一个…

网易云音乐数据爬取与可视化分析系统

摘要 本系统采用Python语言&#xff0c;基于网易云音乐&#xff0c;通过数据挖掘技术对该平台的音乐数据进行了深入的研究和分析&#xff0c;旨在挖掘出音乐市场的规律&#xff0c;为音乐人、唱片公司、音乐爱好者等提供数据支持。系统的开发意义在于&#xff1a;一方面为音乐…

flink 处理函数和流转换

目录 处理函数分类 概览介绍 KeydProcessFunction和ProcessFunction 定时器TimeService 窗口处理函数 多流转换 分流-侧输出流 合流 联合&#xff08;Uniion&#xff09; 连接&#xff08;connect&#xff09; 广播连接流&#xff08;BroadcatConnectedStream&#xf…

大模型微调实战之基于星火大模型的群聊对话分角色要素提取挑战赛:Task01:跑通Baseline

目录 0 背景1 环境配置1.1 下载包1.2 配置密钥1.3 测试模型 2 解决问题2.1 获取数据2.2 设计Prompt2.2 设计处理函数2.3 开始提取 附全流程代码 0 背景 Datawhale AI夏令营第二期开始啦&#xff0c;去年有幸参与过第一期&#xff0c;收获很多&#xff0c;这次也立马参与了第二…

昇思MindSpore学习笔记5--数据变换Transforms

摘要&#xff1a; 昇思MindSpore的数据变换&#xff0c;包括通用变换Common Transforms、图像变换Vision Transforms、标准化Normalize、文本变换Text Transforms、匿名函数变换Lambda Transforms。 一、数据变换Transforms概念 原始数据需预处理后才能送入神经网络进行训练…

【网络】计算机网络-基本知识

目录 概念计算机网络功能计算机网络的组成计算机网络的分类 网络地址网络地址的分类 计算机网络相关性能指标速率带宽吞吐量时延时延的种类&#xff1a; 时延带宽积往返时延RTT利用率 概念 计算机网络是指将多台计算机通过通信设备连接起来&#xff0c;实现数据和资源的共享。…

spring mvc实现一个自定义Formatter请求参数格式化

使用场景 在Spring Boot应用中&#xff0c;Formatter接口用于自定义数据的格式化&#xff0c;比如将日期对象格式化为字符串&#xff0c;或者将字符串解析回日期对象。这在处理HTTP请求和响应时特别有用&#xff0c;尤其是在展示给用户或从用户接收特定格式的数据时。下面通过…

Arthas快速入门

简介 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类…

3.3V到5V的负电源产生电路(电荷泵电压反相器)SGM3204输出电流0.2A封装SOT23-6

前言 SGM3204 非稳压 200mA 电荷泵负电源产生电路&#xff0c;LCEDA原理图请访问资源 SGM3204电荷泵负电源产生电路 SGM3204电荷泵负电源产生电路 一般描述 SGM3204从 1.4V 至 5.5V 的输入电压范围产生非稳压负输出电压。 该器件通常由 5V 或 3.3V 的预稳压电源轨供电。由于…

ElementUI的基本搭建

目录 1&#xff0c;首先在控制终端中输入下面代码&#xff1a;npm i element-ui -S 安装element UI 2&#xff0c;构架登录页面&#xff0c;login.vue​编辑 3&#xff0c;在官网获取对应所需的代码直接复制粘贴到对应位置 4&#xff0c;在继续完善&#xff0c;从官网添加…

OverTheWire Bandit 靶场通关解析(中)

介绍 OverTheWire Bandit 是一个针对初学者设计的网络安全挑战平台&#xff0c;旨在帮助用户掌握基本的命令行操作和网络安全技能。Bandit 游戏包含一系列的关卡&#xff0c;每个关卡都需要解决特定的任务来获取进入下一关的凭证。通过逐步挑战更复杂的问题&#xff0c;用户可…

14-7 为什么你的梦想职业可能会扼杀你的梦想

照片由Johnny Cohen在Unsplash拍摄 “做好工作的唯一方法就是热爱你所做的事情。如果你还没有找到&#xff0c;那就继续寻找。不要安于现状。”——史蒂夫乔布斯 等一下&#xff0c;什么&#xff1f; 这不是一篇关于无聊工作的文章吗&#xff1f;我为什么要用一句完全违背前提…

windows@文件高级共享设置@网络发现功能@从资源管理器网络中访问远程桌面

文章目录 高级共享设置常用选项其他选项操作界面说明 网络类型检查和设置(专用网络和公用网络)&#x1f47a;Note 高级共享设置和防火墙&#x1f47a;命令行方式使用图形界面方式配置 网络发现网络发现功能的详细介绍网络发现的作用&#x1f47a;网络发现的工作原理启用和配置网…

Vulnhub-AdmX

主机发现 靶机 &#xff1a; 192.168.145.131131 这台主机 存活 端口扫描 nmap -sV -O -p 1-65535 192.168.145.131 存在 80 端口 &#xff0c;这里连ssh 端口都没了 80 端口存在 Apache httpd 2.4.1 存在 Apache 默认页面 像这种页面 &#xff0c;没有什么具体的价值 扫描一…

Linux的fwrite函数

函数原型: 向文件fp中写入writeBuff里面的内容 int fwrite(void*buffer&#xff0c;intsize&#xff0c;intcount&#xff0c;FILE*fp) /* * description : 对已打开的流进行写入数据块 * param ‐ ptr &#xff1a;指向 数据块的指针 * param ‐ size &#xff1a;指定…

Webpack: 开发 PWA、Node、Electron 应用

概述 毋庸置疑&#xff0c;对前端开发者而言&#xff0c;当下正是一个日升月恒的美好时代&#xff01;在久远的过去&#xff0c;Web 页面的开发技术链条非常原始而粗糙&#xff0c;那时候的 JavaScript 更多用来点缀 Web 页面交互而不是用来构建一个完整的应用。直到 2009年5月…

Transformer教程之序列到序列模型(Seq2Seq)

在自然语言处理&#xff08;NLP&#xff09;的领域中&#xff0c;Transformer模型无疑是近年来最具革命性的方法之一。它的出现不仅大大提高了机器翻译、文本生成等任务的精度&#xff0c;还推动了整个深度学习研究的进步。本文将详细介绍Transformer模型中的序列到序列模型&am…