20 vue3之自定义hooks

news2024/12/25 22:13:38

Vue3 自定义Hook的作用

主要用来处理复用代码逻辑的一些封装

  • Vue3 的 hook函数 相当于 vue2 的 mixin, 不同在与 hooks 是函数
  • Vue3 的 hook函数 可以帮助我们提高代码的复用性, 让我们能在不同的组件中都利用 hooks 函数

这个在vue2 就已经有一个东西是Mixins

mixins就是将这些多个相同的逻辑抽离出来,各个组件只需要引入mixins,就能实现一次写代码,多组件受益的效果。

mixins弊端

1.会涉及到覆盖的问题

主要是因为mixins的生命周期比组件的快

组件的data、methods、filters会覆盖mixins里的同名data、methods、filters。

 2 变量来源不明确(隐式传入)

变量来源不明确(隐式传入),不利于阅读,使代码变得难以维护。

Vue3 hook 库VueUse

封装了很多常用的功能,节省开发者的时间

Vueuse 是一个功能强大的 Vue.js 生态系统工具库,它提供了可重用的组件和函数,帮助开发者更轻松地构建复杂的应用程序。通过使用 Vueuse,开发者可以提高开发效率,改善应用质量,并与活跃的社区进行互动。无论是小型项目还是大型应用,Vueuse 都是一个值得探索和使用的工具库

Vue3 hook 库Get Started | VueUse

安装

npm i  @vueuse/core  

//若以上命令安装完后 运行项目报错可使用以下命令

npm update @vueuse/core

 vue 自动导入工具(提效)

 unplugin-auto-import 自动导入各库的方法

      // 需自动导入方法的库
      imports: [
        'vue',
        'pinia',
        '@vueuse/core',
        '@vueuse/components'
      ]

 案例

<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>

自定义转base64的hooks 

父组件

<template>
  <h4>官方定义好的hooks使用 及推荐hook库为vueUse</h4>
  <img id="img" src="../public/vite.svg" alt="" />
</template>

<script setup lang="ts">
import { ref, reactive } from "vue";
import toBase64 from "./components/twentyTwo_hooks";
toBase64({
  el: "#img",
}).then((res) => {
  console.log(res);
});
</script>

<style lang="less" scoped></style>

 toBase64.ts 自定义的hooks

// ts文件和在写steup语法是一致的
import { onMounted } from "vue";

type Options = {
  el: string;
};

type Return = {
  Base64: string | null;
};

export default function (
  options: Options
): Promise<Return> {
  return new Promise((resolve) => {
    onMounted(() => {
      const file: HTMLImageElement = document.querySelector(
        options.el
      ) as HTMLImageElement; //增加断言 as HTMLImageElement
      console.log(file);
      file.onload = (): void => {
        // 图片加载完后再转base 不然会导致解析错误

        resolve({
          Base64: tobase64(file),
        });
      };
      let tobase64 = (el: HTMLImageElement): string => {
        let canvas = document.createElement("canvas"); //创建画布
        let ctx = canvas.getContext("2d"); //环境
        canvas.width = el.width;
        canvas.height = el.height;
        ctx?.drawImage(
          el,
          0,
          0,
          canvas.width,
          canvas.height
        );
        console.log(el.width); // 32
        console.log(canvas.toDataURL("image/png/svg"));

        return canvas.toDataURL("image/png/svg");
      };
    });
  });
}

vue官方自带的hooks

useAttrs, useSlots等

父组件

<template>
  <h4>官方定义好的hooks使用 及推荐hook库为vueUse</h4>
  <A title="123" num="456"></A>
</template>

<script setup lang="ts">
import { ref, reactive } from "vue";
import A from "./components/twentyTwo_A.vue";
</script>

 A.vue

<template>
  <div class=""></div>
</template>

<script setup lang="ts">
import { ref, reactive, useAttrs, useSlots } from "vue";
let use = useAttrs();
console.log(use); //{title: '123', num: '456'}
</script>

<style lang="less" scoped></style>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8,STM32CubeMX配置SPI工程(读取norflash的ID)

1&#xff0c;前言 单片机型号&#xff1a;STM32F407 编程环境 &#xff1a;STM32CubeMX Keil v5 硬件连接 &#xff1a;SPI1&#xff0c;CS/SS--->PB14 注&#xff1a;本工程在1&#xff0c;STM32CubeMX工程基础&#xff08;配置Debug、时钟树&#xff09;基础上完…

ARM点灯---看手册

知识点&#xff1a; 一个程序可能会遇到内存泄漏问题&#xff0c;可能一次运行泄漏几M大小&#xff0c;执行几个小时才会泄漏到站崩溃&#xff0c;所以要查看是否有内存泄漏。 查看手册教程 0927-上午 视频1&#xff1a;25&#xff1b;00 硬件程序开发流程 最小系统:单片…

AI驱动的智能运维:行业案例与挑战解析

华为、蚂蚁、字节跳动如何引领智能运维&#xff1f; ©作者|潇潇 来源|神州问学 引言 OpenAI 发布的 ChatGPT 就像是打开了潘多拉的魔盒&#xff0c;释放出了生产环境中的大语言模型&#xff08;LLMs&#xff09;。一些新的概念&#xff1a;“大语言模型运维 (LLMOps)”…

边裁员边收购,思科逐渐变身软件并购之王

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

计算机毕业设计党建学习网站查看发布党建评论留言搜索部署安装/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序

目录 ‌开发背景‌&#xff1a; ‌开发意义‌&#xff1a; ‌开发目标‌&#xff1a; 部署安装 主要功能 功能图 界面介绍 技术介绍 需求分析 1. 用户角色分析 2. 功能需求分析 3. 性能需求分析 4. 界面设计需求 5. 其他需求 ‌党建学习网站的开发背景、意义与目…

史上最详细论文word排版格式指导保姆级教学!

一、前言 首先&#xff0c;每个学校的论文排版格式都是不太相同的&#xff0c;但大体上都是相似的。 正常来说&#xff0c;论文的排版操作是十分枯燥并且重复的&#xff0c;但是word中的样式工具使得论文排版会变得容易。 接下来我将以某个学校论文格式要求为例&#xff0c;…

新手做TikTok用什么手机?当然是海外云手机!

在当今数字化时代&#xff0c;TikTok已成为全球领先的短视频平台&#xff0c;吸引了大量个人和企业入驻&#xff0c;希望在这一广阔的市场中脱颖而出。然而&#xff0c;对于刚刚进入TikTok的新手来说&#xff0c;选择合适的工具是开启TikTok之路的第一步。近年来&#xff0c;海…

开关电源频率是什么?正常范围是多少?

在电子设备的小型化和高效化趋势下&#xff0c;开关电源的频率选择显得尤为重要。本文将详细阐述开关电源频率的范围及其测试方法。  一、开关电源频率的范围 开关电源是一种高效的电力转换装置&#xff0c;为电子设备提供稳定的电源。而作为评估开关电源性能的指标之一&#…

统信服务器操作系统【开机自启动】配置方法

开机自启动的四种配置方法,包括systemctl命令、rc.local文件、crontab任务,通过desktop配置开机自动,前三种方法适合后台程序或者脚本启动,最后一种方法适合图形化程序启动。 文章目录 准备环境配置方法一、通过编写service的方法,使用systemctl配置开机自启二、通过rc.lo…

[EBPF] 实时捕获DM数据库是否存在SQL阻塞

1. 介绍 eBPF&#xff08;extened Berkeley Packet Filter&#xff09;是一种内核技术&#xff0c;它允许开发人员在不修改内核代码的情况下运行特定的功能。eBPF 的概念源自于 Berkeley Packet Filter&#xff08;BPF&#xff09;&#xff0c;后者是由贝尔实验室开发的一种网…

安卓开发板_MTK开发板_联发科开发评估套件Demo板接口介绍

开发板是一种功能丰富的电路平台&#xff0c;专为开发人员设计&#xff0c;集成了多种传感器、扩展接口和通信模块。这使得开发者能够高效进行原型设计和功能验证&#xff0c;极大地简化了软硬件开发的过程。 此次介绍的安卓开发板由MT8788核心板与底板构成&#xff0c;特别之处…

mac怎么设置ip地址映射

最近开发的项目分为了两种版本&#xff0c;一个自己用的&#xff0c;一个是卖出去的。 卖出的域名是和自己的不一样的&#xff0c;系统中有一些功能是只有卖出去的版本有的&#xff0c;但我们开发完之后还得测试&#xff0c;那就需要给自己的电脑配置一个IP地址映射了&#xf…

力扣面试150 寻找峰值 二分

Problem: 162. 寻找峰值 &#x1f468;‍&#x1f3eb; 参考图解 class Solution {public int findPeakElement(int[] nums) {int l 0; // 初始化左边界&#xff0c;表示数组的起始位置int r nums.length - 1; // 初始化右边界&#xff0c;表示数组的结束位置// 当左边界和…

“AI+Security”系列第3期(六):打造最懂安全的智能体-无极AI安全智能体平台落地与实践

近日&#xff0c;由安全极客、Wisemodel 社区、InForSec 网络安全研究国际学术论坛和海升集团联合主办的 “AI Security” 系列第 3 期技术沙龙&#xff1a;“AI 安全智能体&#xff0c;重塑安全团队工作范式” 活动顺利举行。此次活动吸引了线上线下超过千名观众参与。 活动…

基于微信开发助手企鹅音乐微信小程序的设计与实现(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

pyside6与协程

目录 一、常见错误 错误一、使用协程函数作为槽函数。 错误二、在Qt循环中创建新的loop 二、解决方法&#xff1a; ①安装库qasync ②修改Qt入口 ③异步槽函数 ④异步函数 ⑤整体示例 一、常见错误 错误一、使用协程函数作为槽函数。 这样是肯定是不行&#xff…

BufferQueue低延迟优化,以及SurfaceView帧率上限问题解决

目录 了解BufferQueue 为什么会出现问题&#xff1f; 如何优化&#xff1f; 最近在做一个与音视频播放相关的项目&#xff0c;使用到了MediaCodec解码后送到SurfaceView播放场景。发现SurfaceView播放上限是60HZ&#xff0c;不符合项目需求&#xff0c;故而进行了研究并找到…

Jupyter Notebook 产生 jupyter_notebook_config.py 配置文件

Jupyter Notebook 产生 jupyter_notebook_config.py 配置文件 引言正文第一步第二步第三步引言 今天遇到了一个问题,当我安装了 VS code,之后又在 VS code 中安装了 Jupyter notebook 的 extension。之后可以在 VS code 中正常使用 Jupyter Notebook 的所有功能。但是,当我…

sqli-labs时间盲注、布尔盲注脚本

script.py&#xff1a;提供参数&#xff0c;用于调用布尔盲注或时间注入的函数 import time_type import bool_type ​ ​ # inject_type: 1.布尔盲注2.时间注入 # http_type&#xff1a;1.GET请求2.POST请求 # dict_para_data&#xff1a;所有的参数&#xff0c;和默认值 # v…

打靶记录18——narak

靶机: https://download.vulnhub.com/ha/narak.ova 推荐使用 VM Ware 打开靶机 难度&#xff1a;中 目标&#xff1a;取得 root 权限 2 Flag 攻击方法&#xff1a; 主机发现端口扫描信息收集密码字典定制爆破密码Webdav 漏洞PUT 方法上传BF 语言解码MOTD 注入CVE-2021-3…