自定义hook函数

文章来源:我的博客,欢迎访问,不欢迎攻击,谁攻击谁儿子

  • 什么是hook? 本质上是一个函数,把setup函数中的Composition Api进行了封装
  • 类似于vue2中的mixin
  • 自定义hook的优势,复用代码,让setup中的逻辑更清楚易懂

例如下面的代码中,监听鼠标的点击:

<template>  
  <div class="hook">  
    <h2>当前点击时鼠标的坐标为:x:{{ point.x }},y:{{ point.y }}</h2>  
  </div>  
</template>  
<script setup>  
import { onBeforeMount, onMounted, reactive } from 'vue'  
const point = reactive({  
  x: 0,  
  y: 0  
})  
const saveClick = (event) => {  
  point.x = event.pageX  
  point.y = event.pageY  
}  
onMounted(() => {  
  // 下面的监听如果没有及时销毁,那么及时该组件被销毁了,也会监听的  
  window.addEventListener('click', saveClick)  
})  
// 卸载阶段:  
onBeforeMount(() => {  
// 移除监听  
  /*  
  removeEventListener  接收两个参数,第一个是监听对象,第二个是监听的回调函数,所以上面的 saveClick  最好写成一个变量来接收function  
  * */
window.removeEventListener('click', saveClick)  
})
</script>  

注意

上面的有添加监听,也要有移除,否则即使这个组件被移除了,监听事件仍然存在,
window.removeEventListener('click', saveClick)

那么此时我们的其他组件想要使用这部分的逻辑,此时可以使用hooks:

  • 在src下新建hooks的文件夹
  • 在该文件夹下新建文件:userPoint.js,注意hooks文件命名一般以use开头
    写下相关代码,并将其要使用的function暴露出去:
import { onBeforeMount, onMounted, reactive } from 'vue'  
  
// 暴露出去  
export default function savePoint () {  
// 实现鼠标打点相关的数据  
    const point = reactive({  
        x: 0,  
        y: 0  
    })  
// 实现鼠标打点的相关方法  
    const saveClick = (event) => {  
        point.x = event.pageX  
        point.y = event.pageY  
    }  
// 相关周期  
    onMounted(() => {  
        // 下面的监听如果没有及时销毁,那么及时该组件被销毁了,也会监听的  
        window.addEventListener('click', saveClick)  
    })  
  
// 卸载阶段:  
    onBeforeMount(() => {  
// 移除监听  
        /*  
        removeEventListener        接收两个参数,第一个是监听对象,第二个是监听的回调函数,所以上面的 saveClick        最好写成一个变量来接收function  
        * */        window.removeEventListener('click', saveClick)  
    })  
    // 要有返回值  
    return point  
}

那么此时的调用就是:

<template>  
  <div class="hook">  
    <h2>当前点击时鼠标的坐标为:x:{{ point.x }},y:{{ point.y }}</h2>  
  </div>  
</template>  
<script setup>  
import usePoint from "@/hooks/usePoint.js"  
let point = usePoint()  
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无名之辈无名之辈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值