Vue3自定义hooks

devtools/2024/12/22 21:30:37/

1. 什么是自定义hooks?

以函数形式抽离一些可复用的方法像钩子一样挂着,随时可以引入和调用,实现高内聚低耦合的目标。

高内聚:指一个模块内部的功能应该尽可能相关,模块内的元素应紧密合作,完成单一且明确的任务。这样可以提高模块的可维护性和可重用性。

低耦合:指模块或组件之间的依赖性要低,即各个模块尽量独立,减少相互之间的影响。这样,当一个模块发生变化时,不会影响其他模块。

2. 操作步骤

将可复用功能抽离为外部JS文件(通常放在hooks文件夹)
文件名以use开头,比如:useDebounce
引用时将响应式变量或者方法显式解构暴露出来,比如:const { nameRef,Fn } = useDebounce()
(在setup函数里解构出自定义hooks的变量和方法)

3. 示例

简单的加减法计算,将加法和减法抽离为2个自定义Hooks,并且相互传递响应式数据。

3.1 加法功能-hook
javascript">// 加法功能hook
import { ref, watch } from 'vue'
const useSum = (num1, num2) => {const sumNum = ref(0)// [num1, num2] 同时监听多个ref// () => {} 的第一个参数是新的值,返回值是数组,使用[num1, num2]数组解构watch([num1, num2], ([num1, num2]) => {addFn(num1, num2)})const addFn = (num1, num2) => {sumNum.value = num1 + num2}return {sumNum,addFn}
}
export default useSum

3.2 减法功能-hook
javascript">// 减法功能hook
import { ref, watch } from 'vue'
const useSub = (num1, num2) => {const subNum = ref(0)// [num1, num2] 同时监听多个ref// () => {} 的第一个参数是新的值,返回值是数组,使用[num1, num2]数组解构watch([num1, num2], ([num1, num2]) => {subFn(num1, num2)})const subFn = (num1, num2) => {subNum.value = num1 - num2}return {subNum,subFn,}
}
export default useSub

3.3 加减法应用组件
<template><div>num1: <input type="text" v-model.number="num1" />num2: <input type="text" v-model.number="num2" /></div><span>加法等于: {{ sumNum }}</span><span>减法等于: {{ subNum }}</span>
</template><script setup>
import { ref } from 'vue'
import useSum from './hooks/useSum.js'
import useSub from './hooks/useSub.js'const num1 = ref(2)
const num2 = ref(4)// 加法hook
const { sumNum, addFn } = useSum(num1, num2)
addFn(num1.value, num2.value)// 减法hook
const { subNum, subFn } = useSub(num1, num2)
subFn(num1.value, num2.value)</script>


http://www.ppmy.cn/devtools/99051.html

相关文章

Java、python、php版的高考志愿填报辅助系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

Objective-C 中的定时神器:NSTimer 的高效使用指南

标题&#xff1a;Objective-C 中的定时神器&#xff1a;NSTimer 的高效使用指南 在Objective-C编程中&#xff0c;NSTimer是一个强大的工具&#xff0c;用于执行定时任务。无论是需要周期性执行的操作&#xff0c;还是简单的时间延迟&#xff0c;NSTimer都能轻松应对。本文将深…

Android 架构模式之 MVVM

Android 架构 Android 架构模式之 MVCAndroid 架构模式之 MVPAndroid 架构模式之 MVVM 目录 Android 架构架构设计的目的对 MVVM 的理解代码ModelViewViewModel Android 中 MVVM 的问题试吃个小李子BeanModelViewViewModel效果展示 大家好&#xff01; 作为 Android 程序猿&a…

Java将一张excel数据填充到另一张excel表

需求&#xff1a;根据数据库中excel保存地址url&#xff0c;获取到Excel表格&#xff0c;将其中数据填充到一张新生成的excel表格中 1.设置读取excel和要填充excel的起始行列 public void setExcelData(String fileUrl, String downloadPath, String reportFilePath, String …

Ollama - Llama3 docker版本安装部署使用

项目地址&#xff1a;https://github.com/meta-llama/llama3 Meta 发布两款开源Llama 3 8B与Llama 3 70B模型&#xff0c;供外部开发者免费使用。Llama 3的这两个版本&#xff0c;也将很快登陆主要的云供应商。 按照Meta的说法&#xff0c;Llama 3 8B和Llama 3 70B是目前同体量…

pytorch基础学习

环境安装 mac安装conda&#xff08;为什么安装conda? conda类似沙箱&#xff0c;将一个一个环境隔离起来&#xff0c;解决Python工程之前的包冲突问题&#xff09; 下载Miniconda安装器:https://docs.conda.io/en/latest/miniconda.html 执行dmg安装。 安装完成后&#xff0c…

Sa-Token学习圣经:史上最全的权限设计方案,一文帮你成专家

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;并且拿了很多大厂offer。 其中 SpringCloud 工业级底座 &#xff0c;是大家的面试核心&…

Oracle PL/SQL存储过程和函数简单示例

以下是关于Oracle PL/SQL存储过程和函数的一些问题和答案&#xff1a; 问题1&#xff1a;什么是Oracle PL/SQL&#xff1f; 答案&#xff1a;Oracle PL/SQL&#xff08;Procedural Language Extensions to SQL&#xff09;是Oracle对SQL的过程语言扩展&#xff0c;它是一种编…