您的位置:首页 > 汽车 > 时评 > vue3 自定义hooks(组合式函数)

vue3 自定义hooks(组合式函数)

2024/11/18 0:36:18 来源:https://blog.csdn.net/fishmemory7sec/article/details/141517766  浏览:    关键词:vue3 自定义hooks(组合式函数)

什么是hooks

自定义hooks 是Vue3 组合式函数的别称。

在 Vue 应用的概念中,“组合式函数”(Composables) 是一个利用 Vue 的组合式 API 来封装和复用有状态逻辑的函数。

  • 命名规范
    • 组合式函数的命名通常以 “use” 开头,以便于识别它们是可复用的逻辑单元。
    • 例如,useCounteruseFetchData等。
  • 函数结构
    • 组合式函数可以接收一些参数,这些参数可以是初始值、配置选项等。
    • 函数内部可以使用 Vue 的响应式 API(如refreactive等)来创建响应式数据,并定义一些方法来操作这些数据。
    • 最后,函数返回一个包含响应式数据和方法的对象。
  • 使用方式
    • 在 Vue 组件中,使用import语句导入 hooks ,并像调用普通函数一样调用它们。
      例如:import { useMouse } from './mouse.js';
    • 在使用时,显式的将响应式变量或者方法解构暴露出来
      例如:const { x, y } = useMouse()

hooks优点

  • hooks 作为独立逻辑的组件封装,其内部的属性、函数等和外部组件具有响应式依附的作用。
    • hooks 内部可以使用 Vue 3 的响应式 API(如 refreactive 等)来创建响应式数据。当这些 hooks 被外部组件调用时,它们返回的响应式数据可以在组件中直接使用,并且与外部组件的响应式系统相连接。
    • Vue 的响应式系统会自动收集对响应式数据的依赖关系。当 hooks 内部的响应式数据发生变化时,所有依赖于这些数据的组件都会自动触发更新。
  • hooks 可以与 Vue 3 的组合式 API 无缝结合,高内聚低耦合。
  • hooks 是独立的函数,可以更容易地对其进行单元测试。

Vue hooks库

  • VueUse :一个基于 Vue 3 Composition API 的高质量 Hooks 库。
    • 安装:npm i @vueuse/core

使用

一个简单的加减功能

useCounter.ts

import { ref } from 'vue';
// 按照惯例,组合式函数名以“use”开头
export function useCounter(initialValue = 0) {const count = ref(initialValue);const increment = () => {count.value++;};const decrement = () => {count.value--;};// 通过返回值暴露响应式变量、方法return {count,increment,decrement,};
}

.vue中使用:

<template><div><div>Count: {{ count }}</div><button @click="increment">Increment</button><button @click="decrement">Decrement</button></div>
</template>
<script setup lang="ts" >
import { useCounter } from './useCounter.ts';
const { count, increment, decrement } = useCounter();
</script>

鼠标跟踪功能

把功能实现封装到mouse.ts中:

// mouse.ts
import { onMounted, onUnmounted, ref } from 'vue'// 按照惯例,组合式函数名以“use”开头
export function useMouse() {// 被组合式函数封装和管理的状态const x = ref(0)const y = ref(0)// 组合式函数可以随时更改其状态。function update(event:any) {x.value = event.pageXy.value = event.pageY}// 一个组合式函数也可以挂靠在所属组件的生命周期上// 来启动和卸载副作用onMounted(() => window.addEventListener('mousemove', update))onUnmounted(() => window.removeEventListener('mousemove', update))// 通过返回值暴露所管理的状态return { x, y }
}

.vue中使用:

<template>Mouse position is at: {{ x }}, {{ y }}</template>
<script setup lang="ts">
import { useMouse } from './mouse.js'const { x, y } = useMouse()
</script>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com