vue3中自定义hooks函数的封装与使用(最简单的例子)

一、什么是hooks

vue3 中的 hooks 就是函数的一种写法,就是将文件的一些单独功能的 js 代码进行抽离出来进行封装使用。它的主要作用是 Vue3 借鉴了 React 的一种机制,用于在函数组件中共享状态逻辑和副作用,从而实现代码的可复用性。

二、hooks使用规范

  1. 具备可复用功能,才需要抽离为 hooks 独立文件;
  2. 函数名/文件名以 use 开头,形如: useXX;
  3. 引用时将响应式变量或者方法显式解构暴露出来;

三、hooks函数的封装与使用

1. 举例一个不使用hooks函数的简单页面(后面会拆分)

js 复制代码
<template>
  <div>
   <h1>找对象</h1>
	<h2>姓名: {{ person.name }}</h2> <br>
	<h2>年龄: {{ person.age }}</h2> <br>
	<button @click="changeAge">修改年龄</button>

	<h1>找工作</h1>
	<h2>职业: {{ job.name }}</h2> <br>
	<h2>年薪: {{ job.salary }}W</h2> <br>
	<button @click="changeSalary">修改年薪</button>
 </div>
</template>
<script setup lang="ts">
import { reactive} from 'vue'
	
//找对象相关数据
let person = reactive({
	name: '胡歌',
	age: 20
})
//找对象相关方法
function changeAge() {
	person.age += 3
}
//找工作相关数据
let job = reactive({
	name: '前端开发工程师',
	salary: 8
})
//找工作相关方法
function changeSalary() {
	job.salary += 1
}
</script>

上述代码定义了「找对象」和「找工作」两种不同类型的数据和方法,都放在一个脚本下,眼花缭乱,如果我项目中还有地方用到「找工作」数据与方法,就不太好抽离出来,也不方便后期维护,此时,hooks站起来说:我来把它们分开!

2.hooks函数的封装

在src下新建一个hooks文件夹,在hooks文件夹下面新建两个hooks文件,一个命名为usePerson.ts,另一个叫useJob.ts

将「找对象」数据方法全部写在usePerson.ts函数中,「找工作」数据方法全部写在useJob.ts函数中 。

usePerson.ts函数示例:

js 复制代码
import { reactive} from 'vue'
export default function () {
	//找对象相关数据
	let person = reactive({
		name: '胡歌',
		age: 20
	})
	//找对象相关方法
	function changeAge() {
		person.age += 3
	}
	return {
		person, 
		changeAge
	}
}

useJob.ts函数示例:

js 复制代码
import {reactive} from 'vue'

export default function () {
		//找工作相关数据
	let job = reactive({
		name: '前端开发工程师',
		salary: 8
	})
	//找工作相关方法
	function changeSalary() {
		job.salary += 1
	}
	return {
		job, 
		changeSalary
	}

}

此时,在主页面中调用这俩函数,那么页面将变成:

js 复制代码
<template>
	<div>
		<h1>找对象</h1>
		<h2>姓名: {{ person.name }}</h2> <br>
		<h2>年龄: {{ person.age }}</h2> <br>
		<button @click="changeAge">修改年龄</button>

		<h1>找工作</h1>
		<h2>职业: {{ job.name }}</h2> <br>
		<h2>年薪: {{ job.salary }}W</h2> <br>
		<button @click="changeSalary">修改年薪</button>
	</div>
</template>
<script setup lang="ts">

import usePerson from '@/hooks/usePerson'
import useJob from '@/hooks/useJob'


const {person, changeAge} = usePerson()
const {job, changeSalary} =useJob()

</script>

自定义两个hooks函数引入,这样对应的数据和方法就在对应的ts脚本中,方便后期维护,值得提一句的是,hooks函数也有自己的生命周期,与vue3生命周期相同。

四、总结

Vue3 时代 Composition Api,通过利用各种 Hooks 和自定义 Hooks 将碎片化的响应式变量和方法按功能分块写,实现高内聚低耦合。

相关推荐
MoSTChillax2 分钟前
UI规范设计:从视觉到交互的全面指南
前端·ui·产品经理·设计规范·vibecoding
雪碧聊技术25 分钟前
Vue + Element Plus 实现文本溢出显示省略号及悬浮提示
前端·javascript·css·vue.js·文本溢出省略
eric-sjq27 分钟前
0.6B 前端生成模型本地部署实战:消费级显卡跑通 WanlyFrontend 全流程
前端·本地部署
小妖6661 小时前
设置了 box-sizing: border-box; 不管用,下边框还是被挤压没了
前端·css·html
雪隐2 小时前
个人电脑玩AI-16让5060 Ti给你打工——5060Ti 16G 跑 MiniMax-Music-3:从下载到 60s 出歌的全流程
前端·人工智能·后端
张元清3 小时前
React useLatest Hook:在异步回调里读到最新状态 (2026)
javascript·react.js
CAD老兵3 小时前
让 AI Coding Agent 直接访问 CAD 文档:GitMCP 实战指南
前端·人工智能·github
程序员鱼皮3 小时前
DeepSeek Harness 最新邪修曝光!被吹成核弹的极简模式,真的夯吗?
前端·后端·ai编程
无己心3 小时前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
袅沫3 小时前
Nginx中部署多个前端项目——区分路径
服务器·前端