为何Vue3的自定义Hooks这么好用?

开发 前端
所谓的自定义 Hooks 就是在开发 Vue3 项目时,我们将 script 里面相同逻辑功能的变量和方法等封装到一个 js 文件里面,然后通过 export导出。

1.组合式 API 和选项 API

Vue2 提供的编程方式是 Options API,即选项式 API。

我们需要在 data 里面定义变量,在 methods 里面定义方法,在 computed 定义计算后的逻辑。

图片图片

在开发功能的时候,我们需要在 data 、methods、computed 之间来回找代码。

如果功能非常复杂, data 、methods、computed 等里面的代码就会非常长,不好维护。

图片图片

后来 Vue3 出现了,它提供的编程方式是 Composition API,即组合式 API。

在开发功能的时候,我们根据逻辑功能去组织代码,一个功能所定义的所有 API 会放在一起。

图片图片

但是如果业务功能太复杂,script 标签里面的代码也会又臭又长,而且并不是很多人都有加注释的习惯,所以时间长了也不好维护。

图片图片

那能不能把相同逻辑功能的代码分别放到到不同的文件里,其他地方想用的时候直接导入就可以复用了呢?

有的,自定义 Hooks 出现了。

2.自定义 Hooks 介绍

Vue 的自定义 Hooks 是一种封装可重用逻辑的方式。它允许你将复杂的逻辑提取出来,形成独立的函数,然后在不同的组件中复用。这样可以避免在多个组件中重复编写相同的逻辑,提高代码的可读性和可维护性。

通俗易懂来说就是:

1.将可复用的功能逻辑放到一个 js 文件里面,并通过 export  导出。

2.定义 Hooks 的时候,js 的文件名和方法名通常以 use 开头,例如 useAddOrder、useChangeData。

3.通过 import  导入相关的 js 文件,引用时通过解构显示相关的变量和方法。

接下来我们讲一下自定义 Hooks 的案例,其实非常简单。

3.自定义 Hooks 案例

3.1 案例1

创建一个简单的计数器 Hooks

图片图片

使用 Hooks

<template>
  <div>
    <p>count: {{ count }}</p>
    <el-divider></el-divider>
    <el-button type="primary" @click="increment">新增</el-button>
    <el-button type="success" @click="decrement">减少</el-button>
  </div>
</template>
<script setup>
// 导入 hooks
import { useCounter } from "../hooks/useCounter";
// 解构引入
const { count, increment, decrement } = useCounter();
</script>

图片图片

3.2 案例2

创建一个监听浏览器窗口大小变化的 Hooks

图片图片

使用 Hooks

<template>
  <div>
     <p>浏览器窗口宽度: {{ width }}</p>
    <p>浏览器窗口高度: {{ height }}</p>
  </div>
</template>
<script setup>
// 导入 hooks
import { useWindowResize } from "../hooks/useWindowResize";
// 解构引入
const { width, height } = useWindowResize();
</script>

图片图片

4.总结

所谓的自定义 Hooks 就是在开发 Vue3 项目时,我们将 script 里面相同逻辑功能的变量和方法等封装到一个 js 文件里面,然后通过 export导出。

然后在任何页面都可以通过导入、解构的方式使用,大大提高代码的复用性。

自定义 Hooks 将相同的功能代码从一堆代码中解耦出来,让组件结构更清晰,便于维护。

图片图片

Hooks 直译是“钩子”,所以又把这些定义的 js 叫做钩子函数。

责任编辑:武晓燕 来源: 知否技术
相关推荐

2021-11-30 08:19:43

Vue3 插件Vue应用

2023-06-28 08:05:46

场景vue3自定义

2024-11-06 10:16:22

2022-07-26 01:06:18

Vue3自定义指令

2022-08-01 11:41:00

Vue插件

2023-12-01 09:02:57

Vue3WangEditor

2022-08-21 09:41:42

ReactVue3前端

2024-08-12 08:33:05

2022-02-22 13:14:30

Vue自定义指令注册

2024-01-25 09:09:00

fsp帧数游戏

2024-04-26 13:13:30

监控云环境参数

2021-03-31 08:01:50

Vue3 Vue2 Vue3 Telepo

2021-07-05 15:35:47

Vue前端代码

2021-12-01 08:11:44

Vue3 插件Vue应用

2023-11-28 09:03:59

Vue.jsJavaScript

2021-02-18 08:19:21

Vue自定义Vue 3.0

2024-06-03 10:00:51

Vue 3语法插槽

2021-12-02 05:50:35

Vue3 插件Vue应用

2020-12-28 10:10:04

Vue自定义指令前端

2020-09-19 21:15:26

Composition
点赞
收藏

51CTO技术栈公众号