赞
踩
hook
是钩子的意思,看到“钩子”是不是就想到了钩子函数?事实上,hooks
还真是函数的一种写法。
vue3
借鉴 react hooks
开发出了 Composition API
,所以也就意味着 Composition API
也能进行自定义封装 hooks
。
vue3
中的 hooks
就是函数的一种写法,就是将文件的一些单独功能的js
代码进行抽离出来,放到单独的js
文件中,或者说是一些可以复用的公共方法/功能。其实 hooks
和 vue2
中的 mixin
有点类似,但是相对 mixins
而言, hooks
更清楚复用功能代码的来源, 更清晰易懂。
src
中创建一个hooks
文件夹,用来存放hook
文件;hooks
文件下创建useCount.js
文件(一般使用use
开头);import { ref } from 'vue'
export default function() {
const count=ref(0);
const increment = () => {
count.value++;
}
const decrement = () => {
count.value--;
}
// 把方法和数据返回出去
return {
count,
increment,
decrement
}
}
useCount.js
;<script setup>
//引入hooks文件
import useCount from "../hooks/useCount"
// 导入
const { count, increment, decrement } = useCount()
</script>
在实际应用中,自定义hooks
的使用会比我们上面的示例复杂一些,常见的使用场景包括处理网络请求和状态管理。前面我们也提到了,为了更好的进行代码维护,我们为Hooks
代码片段单独创建了一hooks
文件夹,在Vue3
中,为了更好的维护应用程序的状态,官方也推荐我们尽可能地把状态和逻辑分离到单一的切面中,单独组织出一个hooks
文件,存放整个应用或某个模块中可以重用的业务逻辑。
下面我们再来实现一个注册特定的原生事件的Hooks
。
比如要实现一个功能就是在 点击页面时,记录鼠标当前的位置,可以在hooks文件夹中新建一个文件useMousePosition.js
,并编写下面代码:
// src/hooks/useMousePosition.ts
import { ref, onMounted, onUnmounted, Ref } from 'vue'
interface MousePosition {
x: Ref<number>,
y: Ref<number>
}
export default function () {
const x = ref(0)
const y = ref(0)
const updateMouse = (e) => {
x.value = e.pageX
y.value = e.pageY
}
onMounted(() => {
document.addEventListener('click', updateMouse)
})
onUnmounted(() => {
document.removeEventListener('click', updateMouse)
})
//把方法和数据返回出去
return {
x,
y
}
}
在需要用到该hook功能的组件中进行使用。
<template>
<div>
<p>X: {{ x }}</p>
<p>Y: {{ y }}</p>
</div>
</template>
<script setup>
// 引入hooks
import useMousePosition from '../hooks/useMousePosition'
// 使用hooks功能
const { x, y } = useMousePosition()
</script>
以上就是vue3中hooks的基本使用,希望对您有所帮助,感谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。