当前位置: 首页 > news >正文

Vue3自定义hooks

1. 什么是自定义hooks?

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

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

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

2. 操作步骤

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

3. 示例

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

3.1 加法功能-hook
// 加法功能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
// 减法功能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>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++ 内存布局 - Part4: 多继承与this指针调整
  • Deep-Live-Cam启动
  • Flink 流转表,表转流,watermark设置
  • pytest参数化多种用法总结
  • Python在QtSide6(PyQt)上加载网页使用OpenCV进行图像处理
  • PyQtGraph库的基本使用
  • 集合及数据结构第九节————树和二叉树
  • SSL/TLS协议信息泄露漏洞修复
  • C++初学(14)
  • 回顾前面刷过的算法(8)
  • Java-希尔排序算法介绍、应用场景和示例代码
  • spingboot实现常规增删改查
  • erlang学习:gen_server书上案例22.6练习题4
  • jmeter通过参数文件、循环组件实现多账号登陆
  • npm install 报错解决记录
  • [case10]使用RSQL实现端到端的动态查询
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • cookie和session
  • co模块的前端实现
  • js正则,这点儿就够用了
  • Linux后台研发超实用命令总结
  • Python中eval与exec的使用及区别
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • VUE es6技巧写法(持续更新中~~~)
  • Web Storage相关
  • 缓存与缓冲
  • ------- 计算机网络基础
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 微信开放平台全网发布【失败】的几点排查方法
  • 我是如何设计 Upload 上传组件的
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 终端用户监控:真实用户监控还是模拟监控?
  • 追踪解析 FutureTask 源码
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 从如何停掉 Promise 链说起
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • # Redis 入门到精通(七)-- redis 删除策略
  • #Ubuntu(修改root信息)
  • (3) cmake编译多个cpp文件
  • (C++20) consteval立即函数
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)Linux——Linux常用指令
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (算法)Travel Information Center
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)http协议
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .Net CoreRabbitMQ消息存储可靠机制