在Vue的options Api时代,mixins是我们抽离一个功能的重要手段,而在使用composition Api的Vue3时代,我们可以用hooks来实现类似mixins的功能。
相比mixins,hooks更清楚复用功能代码的来源, 更清晰易懂。
下面来了解一下hooks的用法~~

首先,在src中创建一个hooks文件夹,来统一管理项目中的hooks功能

在hooks文件夹中新建一个文件useMousePosition.ts,这个hooks实现的功能是点击页面时,记录鼠标当前的位置

// src/hooks/useMousePosition.ts
import { ref, onMounted, onUnmounted, Ref } from 'vue'interface MousePosition {x: Ref<number>,y: Ref<number>
}
function useMousePosition(): MousePosition {const x = ref(0)const y = ref(0)const updateMouse = (e: MouseEvent) => {x.value = e.pageXy.value = e.pageY}onMounted(() => {document.addEventListener('click', updateMouse)})onUnmounted(() => {document.removeEventListener('click', updateMouse)})return { x, y }
}export default useMousePosition

最后,我们在需要用到该hooks的组件中引入使用

<template><div><p>X: {{ x }}</p><p>Y: {{ y }}</p></div>
</template><script lang="ts">
import { defineComponent} from 'vue'
// 引入hooks
import useMousePosition from '../../hooks/useMousePosition'
export default defineComponent({setup () {// 使用hooks功能const { x, y } = useMousePosition()return {x,y}}
})
</script>

以上就是vue3中hooks的使用,是不是觉得特别的简单清晰

如何在Vue3中使用Hooks相关推荐

  1. 如何在Vue3中使用router

    如何在Vue3中使用router //在vue的js或ts文件中引入vue-router的方法 import {createWebHashHistory,createRouter} from 'vue ...

  2. 中input怎么接受后台传值_[vue3]如何在vue3中优雅地使用vmodel?

    Vue中的数据绑定 绑定数据有三种方式: 插值,也就是{{name}}的形式,以文本的形式和实例data中对应的属性进行绑定 v-bind v-model v-bind eg:v-bind:class ...

  3. 如何在vue3中优雅地使用v-model?

    文章目录 ps:vue3中推荐使用的是reactive写法,文中这种格式只是为了和vue2做对照,只是为了凸显vue3中对v-model的改进,仅供参考. Vue中的数据绑定 v-bind v-bin ...

  4. Vue--》如何在Vue3中书写TSX

    在vue2的时候就已经可以使用 jsx 语法,但是不是很友好,写起来是一件很痛苦的事情,所以你很少见到有人会在vue2中书写 jsx 语法,官方也不建议我们在vue2中进行书写 jsx 的代码风格: ...

  5. Vue3 中使用 AudioWorklet 获取麦克风音量

    Vue3 中使用 AudioWorklet 获取麦克风音量 最近公司在开发音视频项目,其中有个功能是用户监测麦克风讲话是否有波动:于是从各种技术网站想找关于Vue3的示例项目想着借鉴一番,但是功夫不负 ...

  6. 如何在React中使用功能组件

    Have you wondered how to create a component in React? 您是否想过如何在React中创建组件? To answer, it is as simple ...

  7. 如何在Mongoose中更新/更新文档?

    本文翻译自:How do I update/upsert a document in Mongoose? Perhaps it's the time, perhaps it's me drowning ...

  8. 在vue3中使用jsx语法

    背景 vue3项目中 推进使用composition-api + setup 形式 配合jsx+hooks形式,按业务分离,逻辑更清晰,维护更方便: 语法 下面主要通过对比jsx和template不同 ...

  9. Vue3 生命周期Hooks函数与调度器Scheduler的原理

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 写在最前:本文章的目标 Vue3的生命周期的实现原理是比较简单的,但要理解整个Vue3的生命 ...

最新文章

  1. 记录一次生产环境下的jvm内存泄露问题和分析解决过程!
  2. 大数据遇上大型机 结果会如何?
  3. 子域名查询DNS记录查询
  4. 通过超链接访问后台方法_超有用的公众号超链接,3分钟学会2种超链接方法,特别实用!...
  5. 关于JWT(Json Web Token)的思考及使用心得
  6. ubuntu18.04升级cmake
  7. 赛锐信息-AMS系列产品简介
  8. Enterprise Library:DAAB + OLEDB/ODBC操作Access数据库
  9. 语音识别系统市场前景及发展趋势
  10. LINUX信息命令查看大全
  11. sql prompt linux,SQL PROMPT的设置
  12. 5个聚合导航网站,资源、工具、素材应有尽有
  13. 记第三期“晋IT”分享成长沙龙
  14. 数字图像处理:实验八 遥感图像增强
  15. 企业的核心价值观应该建立在哪些要素上??
  16. c语言iq测试,IQ智商测试题
  17. java陆小凤的游戏_《陆小凤传奇》游戏流程、经验心得
  18. 我终于把Boss直聘上热度最高的Java面试八股文总结,渗透面试核心知识点!
  19. 需求文档 | 产品需求文档(PRD)
  20. 选择启动虚拟机后,出现不能为虚拟电脑打开一个新任务的报错

热门文章

  1. hi3635c uboot 初始化 nor flash (XM25QH128AHIG)
  2. 国外插画等形式美术网址
  3. 二分图(H-K算法)
  4. 一个有节操的Android视频播放器JieCaoVideoPlayer
  5. sony 摄像机使用
  6. Http meta详解
  7. 纵横网络靶场 部分wp
  8. mac电脑如何删除其他python版本的包
  9. 热电阻温度测量线性化显示实验
  10. 一文弄懂软件发布生命周期中各阶段名称及代表含义