前端在Vue3这样子写页面更快更高效
前言
在开发管理后台过程中,一定会遇到不少了增删改查页面,而这些页面的逻辑大多都是相同的,如获取列表数据,分页,筛选功能这些基本功能。而不同的是呈现出来的数据项。还有一些操作按钮。
对于刚开始只有 1,2 个页面的时候大多数开发者可能会直接将之前的页面代码再拷贝多一份出来,而随着项目的推进类似页面数量可能会越来越多,这直接导致项目代码耦合度越来越高。
这也是为什么在项目中一些可复用的函数或组件要抽离出来的主要原因之一
下面,我们封装一个通用的useList,适配大多数增删改查的列表页面,让你更快更高效的完成任务,准点下班 ~
前置知识VueVue Composition Api封装
我们需要将一些通用的参数和函数抽离出来,封装成一个通用hook,后续在其他页面复用相同功能更加简单方便。定义列表页面必不可少的分页数据export default function useList() { // 加载态 const loading = ref(false); // 当前页 const curPage = ref(1); // 总数量 const total = ref(0); // 分页大小 const pageSize = ref(10); }如何获取列表数据
思考一番,让useList函数接收一个listRequestFn参数,用于请求列表中的数据。
定义一个list变量,用于存放网络请求回来的数据内容,由于在内部无法直接确定列表数据类型,通过泛型的方式让外部提供列表数据类型。export default function useList( listRequestFn: Function ) { // 忽略其他代码 const list = ref([]); }
在useList中创建一个loadData函数,用于调用获取数据函数,该函数接收一个参数用于获取指定页数的数据(可选,默认为curPage的值)。执行流程设置加载状态调用外部传入的函数,将获取到的数据赋值到list和total中关闭加载态
这里使用了 async/await 语法,假设请求出错、解构出错情况会走 catch 代码块,再关闭加载态
这里需要注意,传入的 listRequestFn 函数接收的参数数量和类型是否正常对应上 请根据实际情况进行调整export default function useList( listRequestFn: Function ) { // 忽略其他代码 // 数据 const list = ref([]); // 过滤数据 // 获取列表数据 const loadData = async (page = curPage.value) => { // 设置加载中 loading.value = true; try { const { data, meta: { total: count }, } = await listRequestFn(pageSize.value, page); list.value = data; total.value = count; } catch (error) { console.log("请求出错了", "error"); } finally { // 关闭加载中 loading.value = false; } }; }
别忘了,还有切换分页要处理
使用 watch 函数监听数据,当curPage,pageSize的值发生改变时调用loadData函数获取新的数据。export default function useList( listRequestFn: Function ) { // 忽略其他代码 // 监听分页数据改变 watch([curPage, pageSize], () => { loadData(curPage.value); }); }
现在实现了基本的列表数据获取实现数据筛选器
在庞大的数据列表中,数据筛选是必不可少的功能
通常,我会将筛选条件字段定义在一个ref中,在请求时将ref丢到请求函数即可。
在 useList 函数中,第二个参数接收一个filterOption对象,对应列表中的筛选条件字段。
调整一下loadData函数,在请求函数中传入filterOption对象即可
注意,传入的 listRequestFn 函数接收的参数数量和类型是否正常对应上 请根据实际情况进行调整export default function useList< ItemType extends Object, FilterOption extends Object >(listRequestFn: Function, filterOption: Ref
人气动漫狐妖小红娘改编剧来了,有望刷新古偶剧的颜值巅峰!国产动漫的强势崛起,也加快了影视行业的蓬勃发展!我发现近些年,小说动漫电视剧,三者之间形成了一条完整的产业链,各类题材的影视化改编层出不穷,中式美感也成为了现今最火爆的一大元素。在
演员拍戏有多拼?朱一龙无替身连滚17次,刘亦菲冬季泡水10个小时文2号探秘人编辑2号探秘人大家都觉得演员光彩照人,拍戏就背背台词,动动嘴皮,摔摔东西发发脾气就可以了。那就想得太简单了,其实他们所拍的每一部剧,可能几分钟的镜头,要反复拍好多次,付
范伟和林志玲演夫妻,大家都以为是我赚了,其实我特别委屈2015年,范伟拿到了道士下山的剧本,看完后,他问陈凯歌,跟他演夫妻的女演员是谁。陈凯歌回答台湾第一美女林志玲,怎么样,不错吧?谁知范伟一听,马上摇头不行不行,这我不能演,我跟她演
充满诡异的乌鸦乌鸦是30年前的老片了,因为李小龙之子李国豪拍摄时意外身亡使此片笼罩着一股神秘感,这一天是4月1日。当一个人死后,乌鸦会将他的灵魂带回他的栖息地,倘若这个人的灵魂得不到平静,则被迫
历史人物故事你知道皇帝也会随意甩锅吗?上官仪惨遭灭门祸唐高宗李治怒火中烧,对匆匆赶来的宰相上官仪下令快给朕拟旨,我要把这个伤天害理无法无天的女人废掉!废掉!废掉!就这一句话,就给不明所以的上官仪带来了灭门之灾!高宗李治为何如此愤怒?只
原解放军20军60师驻防金华的历史往事(下篇2)历史笔记向60师大院子女致以衷心的祝福!前情概要笔者已经撰写了原20军60师驻防金华的历史往事上篇中篇下篇1共三篇。本期将发布原20军60师驻防金华的历史往事(下篇2)。在此,首先
到狂飙中的京海市走一遭,能看到什么?开年最火的剧非狂飙莫属尽管已播出大结局但狂飙的名字依旧每天霸占着热搜榜其主要拍摄地广东江门也被更多人所熟知狂飙在豆瓣上的评分广东省江门市是粤港澳大湾区的重要节点城市历史悠久,文化底
狂飙中毒贩扮演者现实中竟然真涉毒?剧组发声近日,有网友指出,狂飙里毒贩钟阿四的扮演者,在现实生活中可能真的是涉毒人员。扮演者原名为含笑,曾是一名歌手,2009年吸毒被抓。后来改名为韩朴俊,如今出现在狂飙中。2月11日晚,狂
不明飞行物也狂飙最近,多个国家出现了不明飞行物,引发了全球的关注。这些不明飞行物到底是什么?有人认为它们可能是外星人,但也有人认为它们可能是地球上的某种新型飞行器。最近狂飙火得一塌糊涂,想不到UF
陈飞宇正面回应!不愧爹妈都是大佬,这段声明有水平从合照被曝出,到陈飞宇方正面回应,时间已经过去了近一天。而在这短短的一天时间,爆炸式的信息被扒了出来。先是女方的背景,随后又是女方已婚的事实,一时间网上各种邻居同学都出来爆料了,简
女生应聘,私人助理潜规则会有补贴,公司财务要求会煮饭把地球的故事讲给宇宙广东珠海,一位网友在网上应聘电商运营一职位。因为她有过相关工作经验,无论是学历还是工作职责都符合要求,所以投了简历。结果,在和招聘者沟通的过程中,被问道你这边有