08_Vue3 自定义hook函数

目录

自定义hook函数

例如:

[src下新建文件夹 hooks](#src下新建文件夹 hooks)

[创建js文件,文件名为 usePoint.js](#创建js文件,文件名为 usePoint.js)

[在 App.vue 中](#在 App.vue 中)

[Demo.vue 组件中](#Demo.vue 组件中)

[Test.vue 组件中](#Test.vue 组件中)


自定义hook函数

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

例如:

src下新建文件夹 hooks

创建js文件,文件名为 usePoint.js

在 usePoint.js 中封装一个鼠标点击"打点"的函数 savePoint

javascript 复制代码
import {reactive,onMounted,onBeforeUnmount} from 'vue'
function savePoint(){
    //实现鼠标'打点'相关的数据
    let point = reactive({
        x:0,
        y:0
    })

    //实现鼠标'打点'相关的方法
    function savePoint(event){
        point.x = event.pageX
        point.y = event.pageY
        console.log(event.pageX,event.pageY)
    }
    //实现鼠标'打点'相关的生命周期钩子

    onMounted(()=>{
        window.addEventListener("click", savePoint)
    })

    onBeforeUnmount(()=>{
        window.removeEventListener("click", savePoint)
    })

    //一定要返回,否则无法使用point
    return point
}

export default savePoint

在 App.vue 中

用到了两个组件,分别是Demo.vue 和 Test.vue

javascript 复制代码
<template>
  <button @click="xianshi = !xianshi">点我移除Demo</button>
  <Demo v-if="xianshi"></Demo>
  <hr>
  <Test></Test>
</template>

<script>
  import {ref} from 'vue'
  import Demo from './components/Demo.vue'
  import Test from './components/Test'
  export default {
    name: 'App',
    components:{Demo,Test},
    setup(){
      let xianshi = ref(true)

      return {
        xianshi
      }
    }
  }
</script>

Demo.vue 组件中

引入封装好的 usePoint.js ,可以直接使用返回的 point

javascript 复制代码
<template>
  <h2>当前求和为:{{sum}}</h2>
  <button @click="sum++">点我+1</button>
  <hr>
  <h2>当前点击时鼠标的坐标为:x:{{point.x}},y:{{point.y}}</h2>

</template>

<script>
import {ref,reactive,onMounted,onBeforeUnmount} from 'vue'
import usePoint from '../hooks/usePoint'
export default {
  name: 'Demo',
  setup() {
    //数据
    let sum = ref(0)

    let point = usePoint()
    //返回一个对象(常用)
    return {
      sum,
      point
    }
  }
}
</script>

Test.vue 组件中

引入封装好的 usePoint.js ,可以直接使用返回的 point

javascript 复制代码
<template>
  <h2>我是Test组件</h2>
  <h3>姓名:张三</h3>
  <h3>鼠标点击的坐标:x:{{point.x}},y:{{point.y}}</h3>
</template>

<script>
import {ref} from 'vue'
import usePoint from '../hooks/usePoint'
export default {
  name: "test",
  setup(){
    let name = ref('张三')
    let point = usePoint()

    return{
      name,
      point
    }

  }
}
</script>

<style scoped>

</style>
相关推荐
变与不变80612 小时前
jQuery怎么使用
前端·javascript
神膘护体小月半12 小时前
flex 布局的 order 属性
前端·css
paopaokaka_luck12 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
仰望.12 小时前
vue 表格组件 vxe-table 树表格懒加载支持拖拽排序的详细用法
前端·javascript·vue.js·vxe-table
前端 贾公子12 小时前
vite-plugin-uni-manifest 升级指南
前端
小码哥_常12 小时前
iPhone 用户传了张 HEIC,我的前端崩了
前端
小码哥_常12 小时前
你发的原图可能暴露你家地址——聊聊图片 EXIF 隐私
前端
java1234_小锋13 小时前
【技术专题】CSS3 网页技术 - CSS3 优先级
前端·css·css3
鸿蒙开发14 小时前
共享 Schema 与 SchemaFactory
前端·后端·harmonyos
屏什么录14 小时前
录屏超过两小时就卡顿崩盘?从参数调优到代码实现,一文彻底搞定长时间录屏
前端·音视频开发