基于Vue 3组合函数的分页、搜索与排序实践 —— nbsaas-boot项目的实际应用

随着前端框架的不断发展,Vue 3引入的组合式API(Composition API)为开发者提供了一种更灵活、更强大的逻辑复用方式。组合函数(Composition Function)可以将通用逻辑抽取成独立模块,便于在不同组件间共享和复用。本文将基于nbsaas-boot项目,详细介绍如何通过Vue 3的组合函数实现分页、搜索与排序功能,展示组合函数在实际项目中的应用价值。

1. 组合函数概述

Vue 3的组合函数是用于封装功能逻辑的一种模式。与Vue 2的选项式API不同,组合函数允许开发者将组件逻辑集中封装在独立的函数中,便于在不同的组件间共享。

在大型项目中,像nbsaas-boot这样的电商系统,组件往往需要实现复杂的数据交互逻辑,例如分页、搜索、排序等功能。如果将这些功能重复写在多个组件中,代码将会变得臃肿且难以维护。组合函数可以有效解决这一问题。

2. 实践代码——封装分页、搜索与排序逻辑

nbsaas-boot项目中,通过组合函数usePageData,我们可以将分页、搜索、排序等逻辑封装起来,方便在多个页面中复用。以下是完整的组合函数实现:

import {onMounted, ref} from "vue";
import http from "@/utils/request";export function usePageData(functionMethod, searchObject) {let pageData = ref({size: 10,total: 0,totalPage: 0,data: []})let loading = ref(false)const searchList = async () => {loading.value = true;let data = {model: functionMethod,filters: searchObject,page: searchObject.no,size: searchObject.size};let res = await http.post(`/data/search`, data);if (res.code === 200) {pageData.value = res;}loading.value = false;}const sizeChange = async (event) => {searchObject.size = event;await searchList();}const pageChange = async (index) => {searchObject.no = index;await searchList();}const search = async () => {searchObject.no = 1;await searchList();}const changeTableSort = async (column) => {searchObject.sortField = column.prop;searchObject.sortMethod = column.order === "descending" ? "desc" : "asc";await searchList();}onMounted(async () => {await search();})return {pageData, searchList, sizeChange, pageChange, search, changeTableSort, loading}
}
3. 组合函数的实际使用

在项目中,通过组合函数,我们可以在不同的组件中轻松实现分页、搜索、排序等功能。以下是组合函数usePageData的具体使用方式:

import {useDelete} from "@/utils/useDelete";
import {useView} from "@/utils/useView";
import nbSelect from "@/components/nbSelect.vue";
import {useData} from "@/utils/useData";
import {usePageData} from "@/uses/usePageData";
import {onMounted, ref} from "vue";
import http from "@/utils/request";const selectDate = ref({});const searchStore = defineStore('orderPay', {state: () => {return {searchObject: {no: 1,size: 30,sortField: "id",sortMethod: "desc",shop: null,store: null,customer: null,orderType: "4,6",payState: "1",orderState: null,customerName: null,customerPhone: null,date1:null,date2:null}}}
})const {searchObject} = searchStore();const clearSearch = () => {searchObject.shop = null;searchObject.store = null;searchObject.customer = null;searchObject.payState = null;searchObject.orderState = null;searchObject.customerName = null;searchObject.customerPhone = null;searchObject.date1 = null;searchObject.date2 = null;selectDate.value=null;
}
const {pageData, sizeChange, pageChange, search, changeTableSort, loading} = usePageData("page_order", searchObject);

这一行代码解构了组合函数返回的对象,获取到分页数据(pageData)、分页大小变化(sizeChange)、页码变化(pageChange)、搜索(search)、排序变更(changeTableSort)以及加载状态(loading)等方法和数据。

4. 组合函数的优势与应用场景

4.1 代码复用

通过将逻辑封装在组合函数中,开发者可以轻松复用该函数,不论是订单管理、用户管理,还是其他数据列表管理场景,只需传递不同的查询方法和查询对象即可复用该逻辑。例如:

  • 在订单管理页面使用:
const {pageData, sizeChange, pageChange, search, changeTableSort, loading} = usePageData("page_order", searchObject);

在用户管理页面使用:

const {pageData, sizeChange, pageChange, search, changeTableSort, loading} = usePageData("page_user", searchObject);

这种复用方式减少了代码冗余,避免了重复编写分页、搜索和排序逻辑。

4.2 提高代码可维护性

在复杂的业务逻辑中,若将分页、搜索、排序等逻辑散布于组件内部,代码会变得复杂且难以维护。而通过组合函数,可以将逻辑与UI分离,使得代码结构更加清晰,并且能够轻松进行修改和扩展。

例如,若需要修改分页逻辑或添加新的筛选条件,只需在usePageData函数中调整逻辑,其他所有使用该函数的组件都能够受益于此修改。

4.3 响应式数据管理

组合函数中使用refreactive来管理响应式数据,使得数据变化能够自动反映在组件中。例如,pageDataloading都通过ref定义为响应式数据,当分页结果或加载状态发生变化时,页面将自动更新。

let pageData = ref({size: 10,total: 0,totalPage: 0,data: []
});
let loading = ref(false);

通过Vue 3的响应式系统,开发者无需手动更新UI,极大简化了状态管理的复杂性。

5. 组合函数的其他操作——分页、搜索与排序

5.1 分页操作

函数sizeChangepageChange分别处理每页显示条数和当前页码的变更,并在用户进行这些操作时触发重新加载数据。

const sizeChange = async (event) => {searchObject.size = event;await searchList();
}const pageChange = async (index) => {searchObject.no = index;await searchList();
}
5.2 搜索操作

通过search函数,用户可以触发新的搜索请求,且在搜索时自动重置当前页码为第一页。

const search = async () => {searchObject.no = 1;await searchList();
}
5.3 排序操作

changeTableSort函数处理用户点击表格列头时的排序逻辑,并根据排序顺序(升序或降序)调整searchObject中的sortFieldsortMethod,然后重新加载数据。

const changeTableSort = async (column) => {searchObject.sortField = column.prop;searchObject.sortMethod = column.order === "descending" ? "desc" : "asc";await searchList();
}

6. 结论

通过在nbsaas-boot项目中使用Vue 3的组合函数,开发者能够将分页、搜索、排序等逻辑高度封装,并在多个组件中复用。这种做法不仅提高了代码的复用性,还提升了项目的可维护性和扩展性。Vue 3的组合式API为复杂前端应用带来了更高的灵活性和结构化的逻辑管理,未来在更多的项目中,组合函数将成为主流的开发模式。

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

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

相关文章

STM32上实现FFT算法精准测量正弦波信号的幅值、频率和相位差(标准库)

在研究声音、电力或任何形式的波形时,我们常常需要穿过表面看本质。FFT(快速傅里叶变换)就是这样一种强大的工具,它能够揭示隐藏在复杂信号背后的频率成分。本文将带你走进FFT的世界,了解它是如何将时域信号转化为频域…

【微信小程序】搭建项目步骤 + 引入Tdesign UI

目录 创建1个空文件夹,选择下图基础模板 开启/支持sass 创建公共style文件并引入 引入Tdesign UI: 1. 初始化: 2. 安装后,开发工具进行构建: 3. 修改 app.json 4. 使用 5. 自定义主题色 创建1个空文件夹,选择下…

初始c++:入门基础(完结)

打字不易,留个赞再走吧~~~ 目录 一函数重载二引用1 引⽤的概念和定义2引⽤的特性3引⽤的使⽤三inline四nullptr 一函数重载 C⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者 类型不同。这样C函数调⽤…

FPGA随记-二进制转格雷码

反射二进制码(RBC),也称为反射二进制(RB)或格雷码(Gray code),得名于Frank Gray,是二进制数制的一种排列方式,使得连续两个值之间仅有一个比特(二…

【Python进阶】requests库有哪些常用的参数和方法?一篇文章带你详细了解!!!附带源码

常用的requests库参数和方法 常用方法 requests库中定义了多个常用的请求方法,其中requests.get()和requests.post()是最常用的方法。这些方法对应于HTTP协议中的GET和POST方法。 requests.get(url, paramsNone, **kwargs): 用于发送GET请求。requests.post(url…

【高阶数据结构】二叉搜索树的插入、删除和查找(精美图解+完整代码)

🤡博客主页:醉竺 🥰本文专栏:《高阶数据结构》 😻欢迎关注:感谢大家的点赞评论关注,祝您学有所成! ✨✨💜💛想要学习更多《高阶数据结构》点击专栏链接查看&a…

Mysql梳理6——order by排序

目录 6 order by排序 6.1 排序数据 6.2 单列排序 6.3 多行排列 6 order by排序 6.1 排序数据 使用ORDER BY字句排序 ASC(ascend):升序DESC(descend):降序 ORDER BY子句在SELECT语句的结尾 6.2 单列排序 如果没有使用排序操作,默认…

一、桥式整流电路

桥式整流电路 1、二极管的单向导电性: 伏安特性曲线: 理想开关模型和恒压降模型 2、桥式整流电流流向过程 输入输出波形: 3、计算:Vo,lo,二极管反向电压。 学习心得

十三,Spring Boot 中注入 Servlet,Filter,Listener

十三,Spring Boot 中注入 Servlet,Filter,Listener 文章目录 十三,Spring Boot 中注入 Servlet,Filter,Listener1. 基本介绍2. 第一种方式:使用注解方式注入:Servlet,Fil…

【C++】——多态详解

目录 1、什么是多态? 2、多态的定义及实现 2.1多态的构成条件 ​2.2多态语法细节处理 2.3协变 2.4析构函数的重写 2.5C11 override 和 final关键字 2.6重载—重写—隐藏的对比分析 3、纯虚函数和抽象类 4、多态的原理分析 4.1多态是如何实现的 4.2虚函数…

OpenCV 2

目录 图像平滑处理 高斯与中值滤波 图像阈值 ​编辑 Canny边缘检测 非极大值抑制 边缘检测效果 轮廓检测方法 ​编辑 ​编辑​编辑 轮廓检测结果 轮廓特征与近似 图像平滑处理 以上两种出来的图片效果 以上的效果,因为填的是normalize False,越界…

零基础到项目实战:Node.js版Selenium WebDriver教程

在当今数字化时代,Web应用程序的质量和性能至关重要。为了确保这些应用的可靠性,自动化测试成为一种不可或缺的工具。Selenium,作为自动化测试领域的瑰宝,为我们提供了无限可能。本教程将深入介绍Selenium,以及如何结合…

硬盘数据恢复必备:4 款强大硬盘数据恢复软件推荐!

在数字化的时代,我们的生活和工作越来越离不开电脑,而硬盘作为重要的数据存储设备,一旦出现数据丢失的情况,往往会给我们带来极大的困扰。别担心,今天就为大家推荐四款强大的硬盘数据恢复软件,帮助你轻松找…

优化算法(三)—模拟退火算法(附MATLAB程序)

模拟退火算法(Simulated Annealing, SA)是一种基于概率的优化算法,旨在寻找全局最优解。该算法模拟金属退火过程中的物质冷却过程,逐渐降低系统的“温度”以达到全局优化的效果。它特别适用于解决复杂的组合优化问题。 一、模拟退…

[羊城杯 2020]Blackcat1

知识点:数组加密绕过 进入页面熟悉的web三部曲(url地址,web源代码,web目录扫描) url地址没有什么东西去看看源代码. 这有一个mp3文件点一下看看. 在最后面发现了 PHP源码. if(empty($_POST[Black-Cat-Sheriff]) || em…

Android Studio报错: Could not find pub.devrel:easypermissions:0.3.0, 改用linux编译

在Android studio中去编译开源的仓库,大概率就是各种编译不过,一堆错误,一顿改错,基本上会耗费非常多时间,比如: 这个就是改gradle版本,改成7.2 ,修改完成之后,还有其他报…

翻页时钟 2.0-自动置顶显示,点击小时切换显示标题栏不显示标题栏-供大家学习研究参考

更新内容 自动置顶显示点击小时切换显示标题栏,(显示标题栏后可移动时钟位置,鼠标拖动边框调整时钟大小)不显示标题栏时,透明部分光标可穿透修正一个显示bu 下载地址: https://download.csdn.net/download…

iPhone 16系列:熟悉的味道,全新的体验

来看看iPhone 16和Plus这两个新成员,实话说,它们和之前曝光的样子几乎完全一致。下面我们就一起来细数一下这次的几大变化吧。 外观设计:焕然一新 首先,最显眼的变化就是后置镜头模组的布局调整为了垂直排列。这一改变使得整个背…

小程序开发设计-第一个小程序:安装开发者工具③

上篇文章导航: 小程序开发设计-第一个小程序:注册小程序开发账号②-CSDN博客https://blog.csdn.net/qq_60872637/article/details/142219035?spm1001.2014.3001.5501 须知:不同版本选项有所不同,并无大碍。 第一个小程序&#…

《黑神话悟空》开发框架与战斗系统解析

本文主要围绕《黑神话悟空》的开发框架与战斗系统解析展开 主要内容 《黑神话悟空》采用的技术栈 《黑神话悟空》战斗系统的实现方式 四种攻击模式 连招系统的创建 如何实现高扩展性的战斗系统 包括角色属性系统、技能配置文件和逻辑节点的抽象等关键技术点 版权声明 本…