目录
自定义hook函数
例如:
src下新建文件夹 hooks
创建js文件,文件名为 usePoint.js
在 App.vue 中
Demo.vue 组件中
Test.vue 组件中
自定义hook函数
- 什么是 hook ?——本质是一个函数,把 setup 函数中使用的 Composition API 进行了封装。
- 类似于 vue2 中的 mixin。
- 自定义hook的优势:复用代码,让 setup 中的逻辑更清楚易懂。
例如:
src下新建文件夹 hooks
创建js文件,文件名为 usePoint.js
在 usePoint.js 中封装一个鼠标点击“打点”的函数 savePoint
import {reactive,onMounted,onBeforeUnmount} from 'vue'
function savePoint(){//实现鼠标‘打点’相关的数据let point = reactive({x:0,y:0})//实现鼠标‘打点’相关的方法function savePoint(event){point.x = event.pageXpoint.y = event.pageYconsole.log(event.pageX,event.pageY)}//实现鼠标‘打点’相关的生命周期钩子onMounted(()=>{window.addEventListener("click", savePoint)})onBeforeUnmount(()=>{window.removeEventListener("click", savePoint)})//一定要返回,否则无法使用pointreturn point
}export default savePoint
在 App.vue 中
用到了两个组件,分别是Demo.vue 和 Test.vue
<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
<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
<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>