vue3 Hooks 函数封装思想 useTable

1.什么是Hooks

1.一系列已use作为开头的方法,它们提供了可以完全避开class写法,在函数组件中完成生命周期 状态管理 逻辑复用等几乎全部的组件开发工作能力

2.Hooks最核心的价值来着内部的状态管理

3. 在vue3中,hooks的概念结合了vue的响应系统,被称为组合函数,组合函数是vue3组合式API中提供的新的逻辑复用方案,是一类理由vue的组合式API来封装和复用有状态的逻辑函数

2. 封装一个hooks useTable

这是一个基于element表格的hooks 具有请求表格数据 传递请求参数 分页 搜索 重置等功能

/*** @description table 页面表格操作方法封装* @param {Function} api 获取表格数据 api 方法(必传)* @param {Object} initParam 获取数据初始化参数(非必传,默认为{})* @param {Boolean} isPageable 是否有分页(非必传,默认为true)* @param {Boolean} isAuto 是否自动请求(非必传,默认为true)* */
export const useTable = (api: any,initParam: any = {},isPageable: boolean = true,isAuto: boolean = true
) => {const state = ref<any>({// 表格数据tableData: [],// 分页数据pagination: {// 当前页数pageIndex: 1,// 每页显示条数pageSize: 10,// 总页数total: 0,},// 查询参数(只包括查询)searchParam: {},// 初始化默认的查询参数searchInitParam: {},// 总参数(包含分页和查询参数)totalParam: {},// 是否加载中loading: false,// 接口返回的所有内容responseData: null,});onMounted(() => {!!isAuto && reset();});// 调用接口获取表格数据const getTableData = async () => {try {//合并查询参数Object.assign(state.value.totalParam,isPageable? {pageIndex: state.value.pagination.pageIndex,pageSize: state.value.pagination.pageSize,}: {},initParam);state.value.loading = true;let data = await api(state.value.totalParam);if (data.code !== 200) {return;}state.value.responseData = data;const { total } = data.result; // 拿到总页数// 根据是否分页,进行赋值state.value.tableData = isPageable ? data.result.records : [];// 对分页参数进行更新isPageable &&updatePagination({pageIndex: state.value.pagination.pageIndex,pageSize: state.value.pagination.pageSize,total,});} catch (err) {console.log(err);} finally {state.value.loading = false;}};// 更新分页参数const updatePagination = (resPageable: any) => {Object.assign(state.value.pagination, resPageable);};// 更新总参数const updatedTotalParam = () => {state.value.totalParam = {};// 处理查询参数,可以给查询参数加自定义前缀操作const nowSearchParam: any = {};// 防止手动清空输入框携带参数(这里可以自定义查询参数前缀)for (const key in state.value.searchParam) {// * 某些情况下参数为 false/0 也应该携带参数if (state.value.searchParam[key] ||state.value.searchParam[key] === false ||state.value.searchParam[key] === 0) {nowSearchParam[key] = state.value.searchParam[key];}}Object.assign(state.value.totalParam,nowSearchParam,isPageable? {pageIndex: state.value.pagination.pageIndex,pageSize: state.value.pagination.pageSize,}: {});};// 查询方法const search = async () => {await getTableData();};// 重置方法const reset = async () => {state.value.pagination.pageIndex = 1;state.value.pagination.pageSize = 10;updatedTotalParam();// 重置搜索表单的时,如果有默认搜索参数,则重置默认的搜索参数Object.keys(state.value.searchInitParam).forEach((key) => {state.value.searchParam[key] = state.value.searchInitParam[key];});await search();};// 更新每页条数const handleSizeChange = async (val: number) => {state.value.pagination.pageIndex = 1;state.value.pagination.pageSize = val;await getTableData();};// 更新当前页const handleCurrentChange = async (val: number) => {state.value.pagination.pageIndex = val;await getTableData();};return {state,getTableData,handleCurrentChange,handleSizeChange,search,reset,};
};
3.使用这个hooks useTable 
# 导入useTable
import { useTable } from "@/shared/hooks/useTable.ts";# 实例化
# plantListRequest 是封装的请求表格数据接口
# tableScreen 是默认参数(可为空)
# state 当前表格的全部状态数据
# handleCurrentChange
# handleSizeChange 这两个是分页处理方法
# search 这个是搜索方法 
# reset 这个是重置方法 全部参数初始化
const { state, handleCurrentChange, handleSizeChange, search, reset } =useTable(plantListRequest, tableScreen.value);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/38420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux虚拟机部署的MySQL如何使用外网访问?教你轻松使用cpolar在centos搭建内网穿透

文章目录 写在前面实现Linux的内网穿透1、官网账号注册2、在Linux部署我们自己的项目3、一键自动下载安装cpolar4、设置自己的token5、启动cpolar服务6、MySQL穿透测试 卸载方法 写在前面 相信很多小伙伴在本地搭建了一个MySQL数据库&#xff0c;想让其他同事或者合作者一起使…

BCFtools安装

记得之前安装这个软件的时候是非常简单的&#xff0c;但是今天重新安装的时候出现了很多的麻烦&#xff0c;想想还是做个记录吧! bcftools的下载地址如下&#xff1a; Releases samtools/bcftools (github.com)https://github.com/samtools/bcftools/releases/这里我们选用的…

力扣523.连续的子数组和

力扣523.连续的子数组和 哈希表记录下标 class Solution {public:bool checkSubarraySum(vector<int>& nums, int k) {//初始化 方便求余数为0的情况unordered_map<int,int> cnt {{0,-1}};int idx0;for(int i0;i<nums.size();i){idx (idx nums[i]) % …

网络安全 文件上传漏洞-21 upload-labs通过全部关卡

通过全部关卡后对 upload-labs实验环境中 文件上传做一个总结&#xff1a;实验环境中文件上传主要分为黑名单、白名单、读取检查文件类型、删除文件几个类型&#xff0c;针对不同的类型可以使用不同的方式绕过&#xff0c;从而上传木马文件&#xff1a; 黑名单验证 如果是黑名…

【数据结构】(C语言):队列

队列&#xff1a; 线性的集合。先进先出&#xff08;FIFO&#xff0c;first in first out&#xff09;。两个指针&#xff1a;头指针&#xff08;指向第一个进入且第一个出去的元素&#xff09;&#xff0c;尾指针&#xff08;指向最后一个进入且最后一个出去的元素&#xff0…

Linux CentOS 7 离线安装.NET环境

下载 下载.NET 例如&#xff1a; aspnetcore-runtime-6.0.15-linux-x64.tar.gz 复制 复制到如下目录&#xff1a; /usr/local/dotnet/aspnetcore-runtime-6.0.15-linux-x64.tar.gz 解压 cd /usr/local/dotnet/ tar -zxvf aspnetcore-runtime-6.0.15-linux-x64.tar.gz 创建…

Linux开发讲课29---Linux USB 设备驱动模型

Linux 内核源码&#xff1a;include\linux\usb.h Linux 内核源码&#xff1a;drivers\hid\usbhid\usbmouse.c 1. BUS/DEV/DRV 模型 "USB 接口"是逻辑上的 USB 设备&#xff0c;编写的 usb_driver 驱动程序&#xff0c;支持的是"USB 接口"&#xff1a; US…

http.cookiejar.LoadError: Cookies file must be Netscape formatted,not JSON.解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

从直播消息中找到对应的proto协议内容

这么多直播间的消息&#xff0c;我们该怎么从里面找到我们需要的消息定义呢&#xff1f; 其实只要你能找到这个里面的this对象&#xff0c;就可以看到这个对象上面有一个root > webcast > im 这里面的函数就都是用于解析直播间消息的函数&#xff1a; 想要看一下每个消息…

短信API的集成过程步骤?有哪些注意事项?

短信API的安全性如何保障&#xff1f;怎么优化API接口的性能&#xff1f; 在现代通信和业务流程中&#xff0c;短信API的使用变得越来越普遍。短信API为企业提供了一种高效、可靠的方式来向客户发送信息。AoKSend将详细介绍短信API的集成过程步骤&#xff0c;帮助企业顺利实施…

2024.07使用gradle上传maven组件到central.sonatype,非常简单

本文基于sonatypeUploader2.0版本 在1.0版本我们还需要手动去添加maven-publish和signing插件&#xff0c;在2.0版本他已经内置了&#xff0c;如果你仍然需要手动配置&#xff0c;你可以手动添加这两个插件及逻辑。 具体信息参考开源仓库&#xff1a; 插件仓库&#xff1a;h…

一个时代的结束:Centos7将在6月30日退出历史舞台

友情提醒&#xff1a; 如果你使用的是曾经辉煌一时的CentOS Linux 7&#xff0c;一直拖延没有迁移&#xff0c;那么现在距离它正式寿终正寝还有不到一周的时间。 CentOS Linux 7 的结束日期仍定在2024年6月30日。红帽早在 2020 年就做出了有争议的举动&#xff0c;将重点转移到…

【人工智能学习之图像操作(一)】

【人工智能学习之图像操作&#xff08;一&#xff09;】 图像读写创建图片并保存视频读取色彩空间与转换色彩空间的转换通道分离理解HSV基本图形绘制 阀值操作OTSU二值化简单阀值自适应阀值 图像读写 图像的读取、显示与保存 import cv2 img cv2.imread(r"1.jpg")…

面试突击:ConcurrentHashMap 源码详解

本文已收录于&#xff1a;https://github.com/danmuking/all-in-one&#xff08;持续更新&#xff09; 前言 哈喽&#xff0c;大家好&#xff0c;我是 DanMu。这篇文章想和大家聊聊 ConcurrentHashMap 相关的知识点。严格来说&#xff0c;ConcurrentHashMap 属于java.lang.cur…

一起学Hugging Face Transformers(8)- 使用Transformers 库制作一个简易问答系统

文章目录 前言一、 环境准备二、 数据准备三、 模型选择与加载四、 构建问答系统五、 模型评估与优化六、 部署问答系统七、 实际案例分析总结参考资料 前言 问答系统是一种能够自动回答用户问题的人工智能应用&#xff0c;在许多领域具有重要的应用价值&#xff0c;如客户服务…

springboot+vue 开发记录(八) 前端项目打包

本篇文章涉及到前端项目打包的一些说明 我打包后的项目在部署到服务器上后&#xff0c;访问页面时按下F12出现了这种情况&#xff1a; 它显示出了我的源码&#xff0c;这是一种很不安全的行为 该怎么办&#xff1f;很简单&#xff1a; 我们只需要下载一点点插件&#xff0c;再…

kafka分区重建

创建kafka的topic&#xff1a;./bin/kafka-topics.sh --create --zookeeper 192.168.70.212:2181,192.168.70.213:2181,192.168.70.214:2181 --replication-factor 3 --partitions 3 --topic test01 列举kafka的topic: ./bin/kafka-topics.sh --zookeeper 192.168.70.212:2181…

鸿蒙开发Ability Kit(程序框架服务):【声明权限】

声明权限 应用在申请权限时&#xff0c;需要在项目的配置文件中&#xff0c;逐个声明需要的权限&#xff0c;否则应用将无法获取授权。 在配置文件中声明权限 应用需要在module.json5配置文件的[requestPermissions]标签中声明权限。 属性说明取值范围name必须&#xff0c;…

Python中爬虫编程的常见问题及解决方案

Python中爬虫编程的常见问题及解决方案 引言&#xff1a; 随着互联网的发展&#xff0c;网络数据的重要性日益突出。爬虫编程成为大数据分析、网络安全等领域中必备的技能。然而&#xff0c;爬虫编程不仅需要良好的编程基础&#xff0c;还需要面对着各种常见的问题。本文将介绍…

服装分销的系统架构

背景 服装的分销规则&#xff1a;组织结构由总公司代理商专卖店构成。总公司全权负责销售业务&#xff0c;并决定给代理商的份额&#xff1b;代理商再给货到专卖店&#xff0c;整个组织机构呈现树状结构&#xff1b;上级机构对下级机构拥有控制权&#xff0c;主要控制其销售的服…