vue3中hooks用法详解

1、什么是hooks?

hook是钩子的意思,看到“钩子”是不是就想到了钩子函数?事实上,hooks 还真是函数的一种写法。

vue3 借鉴 react hooks 开发出了 Composition API ,所以也就意味着 Composition API 也能进行自定义封装 hooks

vue3 中的 hooks 就是函数的一种写法,就是将文件的一些单独功能的js代码进行抽离出来,放到单独的js文件中,或者说是一些可以复用的公共方法/功能。其实 hooksvue2 中的 mixin 有点类似,但是相对 mixins 而言, hooks 更清楚复用功能代码的来源, 更清晰易懂。

2、hooks基本用法

  1. src中创建一个hooks文件夹,用来存放hook文件;
  2. 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
	}
}
  1. 在用到的文件中引入useCount.js
<script setup>
	//引入hooks文件
	import useCount from "../hooks/useCount"
	// 导入
	const {
    
     count, increment, decrement } = useCount()

</script>

3、hooks复杂场景应用

在实际应用中,自定义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的基本使用,希望对您有所帮助,感谢!

猜你喜欢

转载自blog.csdn.net/DZQ1223/article/details/132066165