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

Vue3 Hooks函数使用及封装

目录

  • 1. 什么是hooks函数?
  • 2.封装一个hooks函数
    • 不带参数的hooks的封装
    • 带参数的hooks的封装

1. 什么是hooks函数?

将单独功能的js代码抽离出来, 加工成公共函数,从而达到逻辑复用。

有了composition API 意味着我们就可以自定义封装hooks,最终的目的都是进行复用,在Vue2中复用的方式大部分都是采取的mixin,但相比hooks,hooks更清楚复用的功能来源及功能。

2.封装一个hooks函数

hooks封装规范:

  1. 新建hooks文件;

  2. 新建文件名前缀加上use+上文件里内容的简意;

  3. 合理利用Vue提供的响应式函数及生命周期;

  4. 暴露出 变量 和 方法 提供外部需要时使用;

如: src/hooks/useSum.ts
意思就是创建一个数据内容的hooks文件

不带参数的hooks的封装

import { ref } from 'vue'
export default function () {// 数据const addSum = ref(0)// 方法function sum() {addSum.value +=  1}// 向外部提供 东西return {sum,addSum}
}

vue文件引入hooks文件

<template><div class="app"><el-button type="success" @click="sum">求和</el-button><span>加法等于:{{ addSum }}</span></div>
</template><script lang="ts" setup>
import { ref } from 'vue'
import useSum from '@/hooks/useSum'
//加法功能-自定义Hook(将响应式变量或者方法形式暴露出来)
const { sum, addSum } = useSum()
</script><style lang="scss" scoped></style>

实现

带参数的hooks的封装

ts文件

import { Ref, ref } from 'vue';
const useAdd = (num1: Ref<number>, num2: Ref<number> ) => {const addNum = ref(0)const addFn = (num1: number, num2: number) => {addNum.value = num1 + num2}return {addNum,addFn}
}
export default useAdd

vue文件

<template><div class="app"><el-button type="success" @click="addFn(num1, num2)">求和</el-button><span>加法等于:{{ addNum }}</span></div>
</template><script lang="ts" setup>
import { ref } from 'vue'
import  useAdd  from '../../hooks/map'
const num1 = ref(2)
const num2 = ref(1)
//加法功能-自定义Hook(将响应式变量或者方法形式暴露出来)
const { addNum, addFn } = useAdd(num1, num2)
</script><style lang="scss" scoped></style>

相关文章:

  • Qt容器QMap(映射)
  • leetcode---Z字形变换
  • 数据结构<1>——树状数组
  • 汇编中的标签与C语言的函数对比与区别
  • Windows10上通过MSYS2编译FFmpeg 6.1.1源码操作步骤
  • 时间序列大模型:TimeGPT
  • 大数据平台红蓝对抗 - 磨利刃,淬精兵!
  • 搭建k8s集群实战(一)系统设置
  • 机器学习-决策树【手撕】
  • spawn_group_template | spawn_group | linked_respawn
  • 【Flink-CDC】Flink CDC 介绍和原理概述
  • 编码风格之(5)GNU软件编码风格(3)
  • c# MathNet.Numerics 圆拟合使用案例
  • 08章【文件与IO】
  • CMS如何调优
  • [译]CSS 居中(Center)方法大合集
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • C++类的相互关联
  • CEF与代理
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Java 内存分配及垃圾回收机制初探
  • Laravel 菜鸟晋级之路
  • PermissionScope Swift4 兼容问题
  • Python_OOP
  • Web Storage相关
  • Yeoman_Bower_Grunt
  • 爱情 北京女病人
  • 从输入URL到页面加载发生了什么
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 服务器从安装到部署全过程(二)
  • 构建工具 - 收藏集 - 掘金
  • 后端_MYSQL
  • 回顾2016
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 聚簇索引和非聚簇索引
  • 前端临床手札——文件上传
  • 使用API自动生成工具优化前端工作流
  • 携程小程序初体验
  • 1.Ext JS 建立web开发工程
  • 正则表达式-基础知识Review
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • # 飞书APP集成平台-数字化落地
  • (16)Reactor的测试——响应式Spring的道法术器
  • (C++)八皇后问题
  • (多级缓存)多级缓存
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • /etc/motd and /etc/issue
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [20181219]script使用小技巧.txt
  • [④ADRV902x]: Digital Filter Configuration(发射端)