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>
相关推荐
wan5555cn31 分钟前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
2501_915918411 小时前
Web 前端可视化开发工具对比 低代码平台、可视化搭建工具、前端可视化编辑器与在线可视化开发环境的实战分析
前端·低代码·ios·小程序·uni-app·编辑器·iphone
雁于飞2 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
凉白开<--2 小时前
mardown-it 有序列表ios序号溢出解决办法
ios·vue
程序员的世界你不懂2 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
索迪迈科技2 小时前
网络请求库——Axios库深度解析
前端·网络·vue.js·北京百思可瑞教育·百思可瑞教育
gnip2 小时前
JavaScript二叉树相关概念
前端
rannn_1113 小时前
【Javaweb学习|实训总结|Week1】html基础,CSS(选择器、常用样式、盒子模型、弹性盒布局、CSS定位、动画),js(基本类型、运算符典例)
css·笔记·学习·html
Ro Jace3 小时前
心灵笔记:第一性原理学习与实践
笔记
attitude.x3 小时前
PyTorch 动态图的灵活性与实用技巧
前端·人工智能·深度学习