基于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.mfbz.cn/a/878739.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java入门,初识Java

Java背景知识 Java是早期美国 sun 公司(Stanford University Network)在1995年推出的一门计算机高级编程语言。Java早期称为Oak(中文翻译为:橡树),后期改名为Java。(因为当时sun公司门口有很多…

使用ENVI之辐射定标

将下载好的遥感影像导入遥感影像处理软件ENVI 5.6中 使用ENVI 5.6的Toolbox中的Radiometric Calibration工具 跳出的Date Input File界面中选中要进行辐射定标的文件选中 再在跳出的Radiometric Calibration界面中将Output Interleave改为BIL再点击Apply FLAASH Settings Soale…

初始爬虫7

针对数据提取的项目实战&#xff1a; 补充初始爬虫6的一个知识点&#xff1a; etree.tostring能够自动补全html缺失的标签&#xff0c;显示原始的HTML结构 # -*- coding: utf-8 -*- from lxml import etreetext <div> <ul> <li class"item-1">…

基于Boost库的搜索引擎开发实践

目录 1.项目相关背景2.宏观原理3.相关技术栈和环境4.正排、倒排索引原理5.去标签和数据清洗模块parser5.1.认识标签5.2.准备数据源5.3.编写数据清洗代码parser5.3.1.编写读取文件Readfile5.3.2.编写分析文件Anafile5.3.2.编写保存清洗后数据SaveHtml5.3.2.测试parser 6.编写索引…

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介 1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 &#xff08;OTA&#xff09; 3在线编程&#xff08;ICP把整个程序都更新掉&#xff09; 1 系统的Bootloader写死了&#xff0c;只能用串口下载到指定的位置&a…

从基础到进阶:利用EasyCVR安防视频汇聚平台实现高效视频监控系统的五步走

随着科技的飞速发展&#xff0c;视频监控技术在社会安全、企业管理、智慧城市构建等领域扮演着越来越重要的角色。一个高效智能的视频监控管理系统不仅能够提升监控效率&#xff0c;还能在预防犯罪、事故预警、数据分析等方面发挥巨大作用。 一、需求分析 在设计视频监控管理…

sql中索引查看是否生效

在pg数据库中有多种索引存在&#xff0c;在一般情况下我们取使用普通索引 以下是一些常见导致索引未命中的原因和优化策略 1.如果查询中的条件与索引字段的顺序不匹配&#xff0c;或者索引字段没有完全包含在查询条件中&#xff0c;索引可能不会被使用。 2.在查询中使用函数…

【Python 数据分析学习】Matplotlib 的基础和应用

题目 1 Matplotlib 主要特性2 Matplotlib 基础知识2.1 导入模块2.2 图形构成2.2.1 图形&#xff08;Figure&#xff09;2.2.2 轴 &#xff08;Axes&#xff09;2.2.3 轴线&#xff08;axis&#xff09; 2.5 中文设置2.5.1 借助rcParams修改字体实现设置2.5.2 增加一个fontprope…

结构体的内存对齐

对⻬规则&#xff1a; 1.结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处 2.其他成员变量要对⻬到某个数字&#xff08;对⻬数&#xff09;的整数倍的地址处。 对⻬数编译器默认的⼀个对⻬数与该成员变量⼤⼩的较⼩值。 但一些编译器下并没有默认对其数 3.结…

Python 解析 JSON 数据

1、有如下 JSON 数据&#xff0c;存放在 data.json 文件&#xff1a; [{"id":1, "name": "小王", "gender": "male", "score": 96.8}, {"id":2, "name": "小婷", "gender&qu…

【踩坑】装了显卡,如何让显示器从主板和显卡HDMI都输出

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 背景介绍 装了显卡后&#xff0c;开机默认是从显卡的HDMI输出&#xff0c;但这很不方便。如何让视频仍然从主板输出&#xff1f;或者说让显卡HDMI和主板…

黑马十天精通MySQL知识点

一. MySQL概述 安装使用 MySQL安装完成之后&#xff0c;在系统启动时&#xff0c;会自动启动MySQL服务&#xff0c;无需手动启动。 也可以手动的通过指令启动停止&#xff0c;以管理员身份运行cmd&#xff0c;进入命令行执行如下指令&#xff1a; 1 、 net start mysql80…

stm32单片机个人学习笔记3(GPIO输出)

前言 本篇文章属于stm32单片机&#xff08;以下简称单片机&#xff09;的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 STM32入门教程-2023版 细…

用Docker 安装Nacos

目录 持久化到数据库 即&#xff1a;Docker MySql 访问管理页面 持久化到数据库 即&#xff1a;Docker MySql 在本机下 新建数据库 进下载中心&#xff1a;https://github.com/alibaba/nacos/releases 下载&#xff1a;https://github.com/alibaba/nacos/releases/tag/2.…

Linux操作系统文件权限管理

Linux操作系统下文件的权限分为当前用户权限、用户组权限和其他用户权限&#xff0c;然后每一类用户或组又分为读权限(r)、写权限(w)和可执行权限(x)。 如图1&#xff0c;打开任一目录&#xff0c;右键单击文件&#xff0c;在弹出菜单选择“属性”&#xff0c;在弹出的属性选项…

【医药行业】实施SAP有哪些医药行业GXP的合规要求和注意事项

作为实施过辉瑞和赛诺菲医药行业的项目&#xff0c;总结了如下&#xff1a; 在医药行业中&#xff0c;GxP&#xff08;Good Practices&#xff0c;良好规范&#xff09;是一系列标准与指南&#xff0c;旨在确保制药、医疗设备和生物制品的质量与合规性。GxP包括多个领域&#x…

Leetcode 找到字符串中所有字母异位词

在 C 中&#xff0c;两个 vector<int> 类型的变量进行 操作时&#xff0c;会逐个比较它们的元素&#xff0c;只有当两个向量的长度相同且每个位置上的元素值都相同时&#xff0c; 操作才会返回 true。 因此&#xff0c;在这道题的代码中&#xff0c;sCount pCount 这一…

【Linux篇】TCP/IP协议(笔记)

目录 一、TCP/IP协议族体系结构 1. 数据链路层 &#xff08;1&#xff09;介绍 &#xff08;2&#xff09;常用协议 ① ARP协议&#xff08;Address Resolve Protocol&#xff0c;地址解析协议&#xff09; ② RARP协议&#xff08;Reverse Address Resolve Protocol&…

基于对数变换的图像美白增强,Matlab实现

博主简介&#xff1a;matlab图像处理&#xff08;QQ:3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于对数变换的图像美白增强&#xff0c;用matlab实现。 一、案例背景和算法介绍 这次案例是美白算法&…

JavaScript 事件处理

一、简介 ​ 事件&#xff1a;发生在HTML元素上的事情&#xff0c;可以是用户的行为&#xff0c;也可以是浏览器的行为&#xff0c;如 用户点击了某个HTML元素用户将鼠标移动到某个HTML元素上用户输入数据时光标离开页面加载完成 ​ 事件源&#xff1a;事件触发的源头&#xf…