在Vue的options Api時(shí)代,mixins是我們抽離一個(gè)功能的重要手段,而在使用composition Api的Vue3時(shí)代,我們可以用hooks來實(shí)現(xiàn)類似mixins的功能。
相比mixins,hooks更清楚復(fù)用功能代碼的來源, 更清晰易懂。
下面來了解一下hooks的用法~~
首先,在src中創(chuàng)建一個(gè)hooks文件夾,來統(tǒng)一管理項(xiàng)目中的hooks功能

hooks.png
在hooks文件夾中新建一個(gè)文件useMousePosition.ts,這個(gè)hooks實(shí)現(xiàn)的功能是點(diǎn)擊頁面時(shí),記錄鼠標(biāo)當(dāng)前的位置
// src/hooks/useMousePosition.ts
import { ref, onMounted, onUnmounted, Ref } from 'vue'
interface MousePosition {
x: Ref<number>,
y: Ref<number>
}
function useMousePosition(): MousePosition {
const x = ref(0)
const y = ref(0)
const updateMouse = (e: MouseEvent) => {
x.value = e.pageX
y.value = e.pageY
}
onMounted(() => {
document.addEventListener('click', updateMouse)
})
onUnmounted(() => {
document.removeEventListener('click', updateMouse)
})
return { x, y }
}
export default useMousePosition
最后,我們在需要用到該hooks的組件中引入使用
<template>
<div>
<p>X: {{ x }}</p>
<p>Y: {{ y }}</p>
</div>
</template>
<script lang="ts">
import { defineComponent} from 'vue'
// 引入hooks
import useMousePosition from '../../hooks/useMousePosition'
export default defineComponent({
setup () {
// 使用hooks功能
const { x, y } = useMousePosition()
return {
x,
y
}
}
})
</script>
以上就是vue3中hooks的使用,是不是覺得特別的簡單清晰