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>
相关推荐
程序员爱技术44 分钟前
Vue 2 + JavaScript + vue-count-to 集成案例
前端·javascript·vue.js
并不会2 小时前
常见 CSS 选择器用法
前端·css·学习·html·前端开发·css选择器
衣乌安、2 小时前
【CSS】居中样式
前端·css·css3
兔老大的胡萝卜2 小时前
ppk谈JavaScript,悟透JavaScript,精通CSS高级Web,JavaScript DOM编程艺术,高性能JavaScript pdf
前端·javascript
龙鸣丿2 小时前
Linux基础学习笔记
linux·笔记·学习
低代码布道师2 小时前
CSS的三个重点
前端·css
耶啵奶膘3 小时前
uniapp-是否删除
linux·前端·uni-app
Nu11PointerException4 小时前
JAVA笔记 | ResponseBodyEmitter等异步流式接口快速学习
笔记·学习
王哈哈^_^5 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
亦枫Leonlew5 小时前
三维测量与建模笔记 - 3.3 张正友标定法
笔记·相机标定·三维重建·张正友标定法