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 的自定义事件?如何触发和监听?
前端·javascript·vue.js
2301_766536052 小时前
调试无痛入手
开发语言·前端
@大迁世界3 小时前
构建 Next.js 应用时的安全保障与风险防范措施
开发语言·前端·javascript·安全·ecmascript
WalkingWithTheWind~4 小时前
Linux搭建Nginx直播流媒体服务RTMP/RTSP转Http-flv视频浏览器在线播放/Vue/Java/ffmpeg
java·linux·nginx·ffmpeg·vue·http-flv·rtsp
IT、木易4 小时前
ES6 新特性,优势和用法?
前端·ecmascript·es6
is今夕4 小时前
postcss.config.js 动态配置基准值
javascript·vue.js·postcss
计算机软件程序设计5 小时前
vue和微信小程序处理markdown格式数据
前端·vue.js·微信小程序
指尖时光.5 小时前
【前端进阶】01 重识HTML,掌握页面基本结构和加载过程
前端·html
前端御书房5 小时前
Pinia 3.0 正式发布:全面拥抱 Vue 3 生态,升级指南与实战教程
前端·javascript·vue.js