vue3中hooks的介绍及用法

本文介绍了Vue3中的Composition API和hooks概念,通过实例展示了如何创建及使用自定义hooks,如useMousePosition,用于记录鼠标点击位置。hooks将可复用的功能代码抽离到单独文件,使得代码组织更清晰,类似于Vue2的mixin但更易理解。在组件中引入并使用hooks,简化了代码结构,提高了代码可读性。

大家好,今天这篇文章是介绍一下vue3中的hooks以及它的用法。本文内容主要有以下两点:

  1. 什么是hooks
  2. vue3中hooks的使用方法

一、 什么是hooks

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

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

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

二、hooks的用法

  1. src中创建一个hooks文件夹,用来存放hook文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XXqAjsI3-1664532965382)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2714bea7b54b461dab887fdc5e68693b~tplv-k3u1fbpfcp-watermark.image?)]

  1. 根据需要写hook文件,比如要实现一个功能就是在 点击页面时,记录鼠标当前的位置,可以在hooks文件夹中新建一个文件useMousePosition.ts
// 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
  1. hook文件的使用:在需要用到该hook功能的组件中的使用,比如在 test.vue文件中:
// src/views/test.vue
<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的使用,是不是觉得特别的简单清晰。

这篇文章算是初学者的一个记录,希望对您有所帮助,也请感兴趣的大佬不吝赐教!

### Vue 3 Hooks 的实现原理与使用方法 Vue 3 中的 Hooks 是基于 Composition API 设计的一种组织和复用组件逻辑的方式。与 React 的 Hooks 不同,Vue 3Hooks 更加紧密地集成在响应式系统中,能够直接访问组件的生命周期和响应式状态。 #### Hooks 的定义与作用 在 Vue 3 中,Hooks 通常是在 `setup()` 函数中使用的函数,它们用于封装和复用组件的逻辑。这些函数可以访问组件的响应式状态、生命周期钩子以及上下文信息。例如,`onMounted` 用于在组件挂载后执行某些操作,`ref` 和 `reactive` 则用于创建响应式数据[^2]。 ```javascript import { ref, onMounted } from &#39;vue&#39;; export default { setup() { const count = ref(0); onMounted(() => { console.log(&#39;组件已挂载&#39;); }); return { count }; } } ``` #### 生命周期 Hooks 的触发时机 Vue 3 提供了一系列生命周期钩子函数,这些函数在组件的不同生命周期阶段被调用。以下是一些常见的生命周期钩子: - `onBeforeMount`:组件挂载前触发。 - `onMounted`:组件挂载后触发。 - `onBeforeUpdate`:数据变更、视图更新前触发。 - `onUpdated`:数据变更、视图更新后触发。 - `onBeforeUnmount`:卸载前触发。 - `onUnmounted`:卸载后触发。 - `onActivated`:当组件被 `<KeepAlive>` 包裹并激活时触发。 - `onDeactivated`:当组件被 `<KeepAlive>` 包裹并失活时触发。 - `onErrorCaptured`:捕获子组件错误时触发。 - `onRenderTracked`:响应式依赖追踪时触发。 - `onRenderTriggered`:响应式依赖触发更新时触发[^3]。 ```javascript <script setup> import { onMounted } from &#39;vue&#39; onMounted(() => { console.log(&#39;组件已挂载完成&#39;) }) </script> ``` #### Hooks 的实现原理 Vue 3Hooks 是基于响应式系统和函数组件的 `setup()` 函数实现的。在 `setup()` 函数中,开发者可以调用各种 Hooks 来访问组件的生命周期、响应式数据和上下文信息。Vue 内部通过一个上下文对象来管理这些状态,并确保 Hooks 在正确的时机被调用。 在底层,Vue 使用了 `effect` 和 `track`/`trigger` 机制来实现响应式。当组件中的响应式数据发生变化时,Vue 会自动追踪这些变化并重新执行相关的副作用函数(如渲染函数或 `watch` 回调)。生命周期钩子本质上也是一种副作用函数,它们在组件的特定生命周期阶段被注册并执行[^1]。 #### 自定义 Hooks 的结构化思路 除了官方提供的生命周期 Hooks,开发者还可以创建自定义 Hooks 来封装可复用的逻辑。自定义 Hooks 通常以函数形式定义,并返回一组响应式数据或方法供组件使用。 ```javascript function useCounter() { const count = ref(0); function increment() { count.value++; } return { count, increment }; } ``` 在组件中使用该自定义 Hook: ```javascript import { useCounter } from &#39;./useCounter&#39;; export default { setup() { const { count, increment } = useCounter(); return { count, increment }; } } ``` 通过这种方式,可以将组件逻辑模块化,提高代码的可维护性和复用性。 --- ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值