Vue3 自定义hook函数

news2024/11/25 8:21:14

这个hook函数并不是Vue3 自带的,而是为了方便我们书写和复用代码。

当我们在setup函数中写了很多内容过后,就会变得很乱,所以我们将实现相同功能的数据、方法和生命周期等等打包单独放在一个文件中,就会整洁很多。

例如:我们有一段代码,实现的是点击页面获取当前点击的位置并展示。

import { ref, reactive, onMounted, onBeforeUnmount } from "vue";

export default {
  name: "MyItem",
  setup() {
    let num = ref(0);  // 模拟其他无关数据
    // 坐标点数据
    let point = reactive({
      x: 0,
      y: 0,
    });

    // 获取坐标点函数
    function getPoint(event) {
      point.x = event.pageX;
      point.y = event.pageY;
    }

    // 在生命周期函数中进行事件绑定和解绑
    onMounted(() => {
      window.addEventListener("click", getPoint);
    });
    onBeforeUnmount(() => {
      window.removeEventListener("click", getPoint);
    });
    return {
      num,
      point
    }
  },
};

一、创建文件夹

我们将整理的内容整理在和components 文件夹平级的hooks 文件夹下,文件夹下的js文件我们使用通常 usexxx.js 来命名。

然后我们将和点击获取坐标的相关代码放入该文件中,并整理为函数进行暴露,函数中要返回最终的需要使用的数据。

注意:这里需要引入相关的composition API 

import { reactive, onMounted, onBeforeUnmount } from "vue";

export default () => {
    // 坐标点数据
    let point = reactive({
        x: 0,
        y: 0,
    });

    // 获取坐标点函数
    function getPoint(event) {
        point.x = event.pageX;
        point.y = event.pageY;
    }

    // 在生命周期函数中进行事件绑定和解绑
    onMounted(() => {
        window.addEventListener("click", getPoint);
    });
    onBeforeUnmount(() => {
        window.removeEventListener("click", getPoint);
    });
    return point;
}

二、使用自定义hook函数

我们将usepoint.js 文件编写完成后,需要在组件中进行引入和使用。

直接使用一个变量接收函数的返回值,然后return 出去即可。

import { ref } from "vue";
import usepoint from "../hooks/useopint";

export default {
  name: "MyItem",
  setup() {
    let num = ref(0);
    let point = usepoint();  // 点击页面输出坐标

    return {
      num,
      point
    }
  },
};

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

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

相关文章

天津市专业大数据培训班,大数据就业岗位的多样性

大数据技术应用广泛,几乎涉及到了各个行业和领域。毕业后,我们可以选择从事大数据工程师、数据分析师、数据科学家等职业,也可以选择进入金融、医疗、电商等行业进行数据分析和决策支持。 大数据就业岗位多样 大数据培训所涉及的就业岗位有…

原来你不会找资源,三个宝藏白嫖书籍网站,阅读改变生活(一)

[无名图书] - 探索无尽的书海 致力于为你打开一扇通往无限知识和无穷想象的大门。从畅销小说到学术专著,书库涵盖了各个领域,满足了各种阅读胃口。无论你是文学爱好者、学术追求者还是正在寻找新奇刺激的冒险者,这都是你不可错过的阅读伴侣。…

固有时间尺度分解(Intrinsic Time Decomposition,ITD)

代码教程 固有时间尺度分解(ITD) 代码原理 ITD(Intrinsic Time Decomposition)是一种信号分解方法,用于将信号分解成多个时频组件。它的基本思想是将信号分解为一组原子函数,这些原子函数具有不同的时频特性。 ITD分解的步骤如下…

Python的基础:模块(Modules)和包(Packages)详解

1. 模块(Modules) 一个模块是一个包含了 Python 定义和语句的文件。模块可以包括变量、函数、类等,并且提供了一种将相关代码组织成可重用单元的方式。一个模块的定义通常包括以下几个方面:   1)文件扩展名&#xff…

【软件推荐】我的常用Windows软件

文章目录 前言Colors Lite(颜色吸取)Everything(文件搜索)知云文献翻译Directory Opus(文件管理器)Snipaste(截图)AxMath(公式编辑器)Deskpin(窗口…

计算机视觉的应用17-利用CrowdCountNet模型解决人群数量计算问题(pytorch搭建模型)

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用17-利用CrowdCountNet模型解决人群数量计算问题(pytorch搭建模型)。本篇文章,我将向大家展示如何使用CrowdCountNet这个神奇的工具,以及它是如何利用深度学习技术来解决复杂…

【C++心愿便利店】No.13---C++之探索vector底层原理

文章目录 前言一、STL简介1.1 什么是STL1.2 STL的六大组件 二、vector的介绍及使用2.1 vector的介绍2.2 vector的使用2.2.1 vector的定义2.2.2 vector iterator 的使用2.2.3 vector 空间增长问题2.2.4 vector 增删查改 三、vector模拟实现3.1 成员变量3.2 成员函数3.2.1 构造函…

穿越时空:未来云计算的奇妙世界

文章目录 1. 云计算与智能家居2. 云计算与无人驾驶3. 云计算与虚拟现实4. 云计算与人工智能未来展望 🎉欢迎来到云计算技术应用专栏~穿越时空:未来云计算的奇妙世界 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客&am…

JS-项目实战-点击水果名修改特定水果库存记录

1、fruit.js function $(name) {if (name) {//假设name是 #fruit_tblif (name.startsWith("#")) {name name.substring(1); //fruit_tblreturn document.getElementById(name);} else {return document.getElementsByName(name); //返回的是NodeList类型}} }//当…

电脑版微信图片保存在哪个文件夹,如何一次性全选保存

8-7 电脑版的微信聊天,接收到图片后,会保存到微信的个人数据文件夹中,但是有个问题是这些图片都是加密保存的,普通情况下,确实无法人工去取出来,但是下面有方法可以快速将这些图片在脱离微信的情况下&…

如果免费使用GPT4

各位兄弟,这个漏洞也是最近挖到的,觉得这个可以为大家谋福利,所以我这给你们写一下。 看我如下操作 先登录GPT4 登录进来后,我们可以看见这里是GPT3 然后看如下操作 然后再问一下是模型几 各位就是这么简单,点过关注…

C++ Qt 学习(九):模型视图代理

1. Qt 模型视图代理 Qt 模型视图代理,也可以称为 MVD 模式 模型(model)、视图(view)、代理(delegate)主要用来显示编辑数据 1.1 模型 模型 (Model) 是视图与原始数据之间的接口 原始数据可以是:数据库的一个数据表、内存中的一个 StringList&#xff…

小型企业如何选择非管理型交换机?

网络的一个关键要素都是交换机,它在连接设备和确保无缝数据流动方面发挥着关键作用。特别是非管理型交换机,为希望提升网络能力的小型企业提供了一种经济高效的解决方案。在本文中,我们将探讨非管理型交换机在小型企业网络中的广泛应用以及小…

【PIE-Engine 数据资源】8天合成LAI产品(MOD15A2H.006)

文章目录 一、 简介二、描述三、波段四、属性五、示例代码参考资料 【PIE-Engine 数据资源】xxx 一、 简介 数据名称8天合成LAI产品(MOD15A2H.006)时间范围2000年-现在空间范围全球数据来源NASA代码片段var images pie.ImageCollection(“USGS/MOD15A2H/006”) 二、描述 全球…

使用Spring Boot实现大文件断点续传及文件校验

一、简介 随着互联网的快速发展,大文件的传输成为了互联网应用的重要组成部分。然而,由于网络不稳定等因素的影响,大文件的传输经常会出现中断的情况,这时需要重新传输,导致传输效率低下。 为了解决这个问题&#xff…

数字档案室建设评价

数字档案室建设评价应考虑以下几个方面: 1. 安全性:数字档案室的主要目的是确保档案资料的安全性。评价应考虑数字档案室的物理安全性、防火措施、保密措施、网络安全等方面。 2. 可访问性:数字档案室应该易于访问和使用。评价应考虑数字档案…

平均分(C++)

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

【游戏开发】快来听听我与口袋方舟的故事吧

目录 写在前面 我与口袋方舟的邂逅 口袋方舟编辑器 027版本正式公测 粉丝福利 写在后面 写在前面 哈喽小伙伴们下午好呀,这里是一只有趣的兔子。最近博主在到处整活给大家谋福利,这次兔哥打听到了一个劲爆的消息,口袋方舟正式公测啦&a…

gitLab server version 13.12.1 is not supported

拉代码的时候,报的这个错,实际上就是因为gitLab 版本太低了,这里不准备升级版本,打算继续使用账号密码来拉取代码 在idea已经安装的插件中,去掉gitlab插件,如下: 之后再拉取代码,就…

优化奥德赛:揭开训练人工神经网络的本质

一、介绍 近年来,人工智能领域取得了显著的进步,而这场革命的核心是训练人工神经网络 (ANN) 的复杂过程。这些网络受到人脑的启发,能够从数据中学习复杂的模式和表示。人工神经网络成功的核心是认识到训练它们从根本上…