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

React18-模拟列表数据实现基础表格功能

文章目录

  • 分页功能
  • 分页组件有两种
      • 接口参数
      • 分页类型
      • 用户列表参数类型
  • 模拟列表数据
  • 分页触发方式
  • 实现
    • 目录

分页功能

在这里插入图片描述

分页组件有两种

table组件自带分页

<TableborderedrowKey="userId"rowSelection={{ type: 'checkbox' }}pagination={{position: ['bottomRight'],pageSize: pagination.pageSize,current: pagination.current,showQuickJumper: true,showSizeChanger: true,onChange: (page, pageSize) => {setPagination({current: page,pageSize})}}}dataSource={data}
/>

分页组件

<PaginationpageNum={pagination.pageNum}pageSize={pagination.pageSize}total={pagination.total}onChange={(pageNum: number, pageSize: number) => {setPagination({current: page,pageSize})}}
/>

接口参数

{pageNum: 1,pageSize: 10,userId: '',userName: '',state: ''
}

分页类型

export interface PageParams {pageNum: number | undefinedpageSize?: number | undefined
}

用户列表参数类型

export interface Params extends PageParams {userId?: numberuserName?: stringstate?: number
}

模拟列表数据

const list = Array.from({length:20}).fill({}).map((item:any)=>{item = {...data.list[0]}item.userId = Math.random()return item})

分页触发方式

  1. 进入页面,模拟初始化列表
  2. 点击搜索,初始化列表
  3. 点击页码,更新列表
  4. 点击每页条数, 更新列表

实现

目录

在这里插入图片描述
system/index.tsx

import api from "@/api";
import { PageParams, User } from "@/types/api";
import { formatDate } from "@/utils";
import { Button, Form, Input, Select, Space, Table } from "antd";
import { ColumnsType } from "antd/es/table";
import { useEffect, useState } from "react";export default function UserList() {const [form] = Form.useForm();const [data, setData] = useState<User.UserItem[]>([])const [total, setTotal] = useState(0)const [pagination, setPagination] = useState({current: 1,pageSize: 10})// 获取用户列表const getUserList = async (params: PageParams) => {const values = form.getFieldsValue()const data = await api.getUserList({...values,pageNum: params.pageNum,pageSize: params.pageSize});const list = Array.from({ length: 50 })// 模拟数据.fill({}).map((item: any) => {item = { ...data.list[0] }item.userId = Math.random()return item})// setData(data.list)// setTotal(data.page.total)setData(list) // 模拟数据setTotal(list.length)// 模拟数据setPagination({current: data.page.pageNum,pageSize: data.page.pageSize,})}useEffect(() => {getUserList({pageNum: pagination.current,pageSize:  pagination.pageSize})}, [pagination.current, pagination.pageSize])// 在Page切换时候,进行依赖收集,修改其中的pageNum,与pageSize,完成列表更新// 搜索const handleSearch = ()=>{getUserList({pageNum: 1,pageSize: pagination.pageSize})}// 重置表单const handleReset = ()=>{form.resetFields()}// const dataSource = [//   {//     _id: '',//     userId: 0,//     userName:'',//     userEmail: '',//     deptId: '',//     state: 0,//     mobile: '',//     job: '',//     role: 0,//     roleList: '',//     createId: 0,//     deptName: '',//     userImg: '',//   }// ];// https://ant-design.antgroup.com/components/table-cnconst columns: ColumnsType<User.UserItem> = [{title: '用户ID',dataIndex: 'userId',key: 'userId',},{title: '用户名称',dataIndex: 'userName',key: 'userName',},{title: '用户邮箱',dataIndex: 'userEmail',key: 'userEmail',},{title: '用户角色',dataIndex: 'role',key: 'role',render(role: number) {return {0: '超级管理员',1: '管理员',2: '体验管理员',3: '普通用户'}[role]}},{title: '用户状态',dataIndex: 'state',key: 'state',render(state: number) {return {1: '在职',2: '试用期',3: '离职',}[state]}},{title: '注册时间',dataIndex: 'createTime',key: 'createTime',render(createTime: string) {return formatDate(createTime)}},{title: '操作',render(record, values) {return <Space><Button type="text">编辑</Button><Button type="text" danger>删除</Button></Space>}},];return <div className="user-list"><div className="search-form"><Formlayout="inline"form={form}initialValues={{ state: 0 }}><Form.Item name="userId" label="用户ID"><Input placeholder="请输入用户ID" /></Form.Item><Form.Item name="userName" label="用户名称"><Input placeholder="请输入用户名称" /></Form.Item><Form.Item name="state" label="状态"><Select style={{ width: 120 }}><Select.Option value={0}>所有</Select.Option><Select.Option value={1}>在职</Select.Option><Select.Option value={2}>试用期</Select.Option><Select.Option value={3}>离职</Select.Option></Select></Form.Item><Form.Item><Space><Button type="primary" onClick={handleSearch}>搜索</Button><Button type="default" onClick={handleReset}>重置</Button></Space></Form.Item></Form></div><div className="base-table"><div className="header-wrapper"><div className="title">用户列表</div><div className="action"><Button type="primary">新增</Button><Button type="primary" danger>批量删除</Button></div></div><Tableborderedpagination={{position:['bottomRight'],current: pagination.current,pageSize:pagination.pageSize,total,showQuickJumper: true,showSizeChanger:true, // 控制分页器一直有,如果不设置,那么只有total>50时,展示分页器showTotal:(total)=>`总共${total}`,onChange:(page, pageSize)=>{setPagination({current: page,pageSize: pageSize})}}}rowKey='userId'rowSelection={{type: 'checkbox'}}dataSource={data}columns={columns}/></div></div>
}

api/index.tsx

import { User } from '@/views/system/user'
import qs from 'qs'
export default {getUserList(params: User.Params) {// mockconsole.log('userList请求参数')console.log(qs.stringify(params))if (params.pageNum > 1) {return fetch('/system/userEmpty.json?' + qs.stringify(params)).then(res => res.json()).then(res => {return {...res.data,data: {page: {pageNum: params.pageNum,pageSize: params.pageSize,total: 0},list: [{}]}}})} else {return fetch('/system/user.json?' + qs.stringify(params)).then(res => res.json()).then(res => res.data)}}
}

public/system/user.json

{"code": 0,"data": {"page": {"pageNum": 1,"pageSize": 10,"total": 10},"list": [{"userImg": "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png","createTime": "2023-11-22T10:44:25.532Z","userId": 1000016,"userName": "JackMa","userEmail": "jackma@mars.com","mobile": "17011221122","sex": 0,"deptId": "","deptName": "","job": "前端工程师","state": 1,"role": 2,"createId": 1000002,"lastLoginTime": "2024-01-30T15:47:11.116Z","roleList": "655dbedb11c02c8597dce76f"},{"userId": 100017,"userName": "JackBean","userEmail": "jackbean@mars.com","deptId": "655dbef811c02c8597dce77a","deptName": "大前端","state": 1,"role": 1,"roleList": "655dbedb11c02c8597dce76f","createId": 1000002,"userImg": "","createTime": "2023-11-22T08:52:47.963Z","lastLoginTime": "2023-11-22T09:21:22.314Z","__v": 0},{"userId": 100018,"userName": "9549587","userEmail": "9549587@mars.com","deptId": "","deptName": "","state": 1,"role": 1,"roleList": "","createId": 1000002,"userImg": "http://api-driver.marsview.cc/3f9393c68f57ac57704652f00.png","createTime": "2023-11-22T08:52:47.963Z","lastLoginTime": "2024-01-30T06:53:57.530Z","__v": 0,"job": "测试"},{"userId": 100020,"userName": "1366143860","userEmail": "1366143860@mars.com","deptId": "6568c7254a54800ac8d5b18e","deptName": "部门5","state": 1,"role": 1,"roleList": "","createId": 1000002,"userImg": "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png","createTime": "2023-11-22T08:52:47.963Z","lastLoginTime": "2023-12-21T07:41:46.976Z","mobile": "13072361279","job": "前端1"},{"userId": 100022,"userName": "413401333","userEmail": "413401333@mars.com","deptId": "6582ae994a54800ac8d76b80","deptName": "前端","state": 1,"role": 1,"roleList": "6582aeb44a54800ac8d76b88","createId": 1000002,"userImg": "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png","createTime": "2023-11-22T08:52:47.963Z","lastLoginTime": "2024-01-02T02:16:53.036Z","job": "前端"},{"userId": 100023,"userName": "1050732226","userEmail": "1050732226@mars.com","deptId": "","deptName": "大前端","state": 1,"role": 1,"roleList": "","createId": 1000002,"userImg": "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png","createTime": "2023-11-22T08:52:47.963Z","lastLoginTime": "2024-01-06T05:55:34.501Z"},{"userId": 100024,"userName": "191337035","userEmail": "191337035@mars.com","deptId": "","deptName": "大前端","state": 1,"role": 1,"roleList": "","createId": 1000002,"userImg": "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png","createTime": "2023-11-22T08:52:47.963Z","lastLoginTime": "2024-01-06T05:56:01.926Z"},{"userId": 100025,"userName": "717210290","userEmail": "717210290@mars.com","deptId": "","deptName": "大前端","state": 1,"role": 1,"roleList": "","createId": 1000002,"userImg": "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png","createTime": "2023-11-22T08:52:47.963Z","lastLoginTime": "2024-01-06T05:56:16.764Z"},{"userId": 100027,"userName": "475721797","userEmail": "475721797@mars.com","deptId": "","deptName": "大前端","state": 1,"role": 1,"roleList": "","createId": 1000002,"userImg": "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png","createTime": "2023-11-22T08:52:47.963Z","lastLoginTime": "2024-01-06T06:10:25.195Z"},{"userId": 100028,"userName": "1667519970","userEmail": "1667519970@mars.com","deptId": "","deptName": "大前端","state": 1,"role": 1,"roleList": "","createId": 1000002,"userImg": "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png","createTime": "2023-11-22T08:52:47.963Z","lastLoginTime": "2024-01-06T06:02:09.986Z"}]},"msg": ""}

public/system/userEmpty.json

{"code": 0,"data": {},"msg": ""}

在切换分页时候看到参数发生变化
在这里插入图片描述

搜索时候可以看到搜索参数传入
在这里插入图片描述
代码地址

相关文章:

React18-模拟列表数据实现基础表格功能

文章目录 分页功能分页组件有两种接口参数分页类型用户列表参数类型 模拟列表数据分页触发方式实现目录 分页功能 分页组件有两种 table组件自带分页 <TableborderedrowKey"userId"rowSelection{{ type: checkbox }}pagination{{position: [bottomRight],pageSi…...

MySQL查询数据(十)

MySQL查询数据&#xff08;十&#xff09; 一、SELECT基本查询 1.1 SELECT语句的功能 SELECT 语句从数据库中返回信息。使用一个 SELECT 语句&#xff0c;可以做下面的事&#xff1a; **列选择&#xff1a;**能够使用 SELECT 语句的列选择功能选择表中的列&#xff0c;这些…...

AJAX-常用请求方法和数据提交

常用请求方法 请求方法&#xff1a;对服务器资源&#xff0c;要执行的操作 axios请求配置 url&#xff1a;请求的URL网址 method&#xff1a;请求的方法&#xff0c;如果是GET可以省略&#xff1b;不用区分大小写 data&#xff1a;提交数据 axios({url:目标资源地址,method…...

2024美国大学生数学建模竞赛美赛B题matlab代码解析

2024美赛B题Searching for Submersibles搜索潜水器 因为一些不可抗力&#xff0c;下面仅展示部分代码&#xff08;很少部分部分&#xff09;和部分分析过程&#xff0c;其余代码看文末 Dthxlsread(C:\Users\Lenovo\Desktop\Ionian.xlsx); DpDth(:,3:5); dy0.0042; dx0.0042; …...

【DouYing Desktop】

I) JD 全日制大专及以上学历&#xff1b; 2. 3年以上的IT服务支持相关工作经验 3. 有较强的桌面相关trouble shooting与故障解决能力&#xff0c;能够独立应对各类型桌面问题&#xff1b; 4. 具备基础的网络、系统知识&#xff0c;能够独立解决常见的网络、系统等问题&#xf…...

正则表达式与文本处理工具

目录 引言 一、正则表达式基础 &#xff08;一&#xff09;字符匹配 1.基本字符 2.特殊字符 3.量词 4.边界匹配 &#xff08;二&#xff09;进阶用法 1.组与引用 2.选择 二、命令之-----grep &#xff08;一&#xff09;基础用法 &#xff08;二&#xff09;高级用…...

IDEA中的Run Dashboard

Run Dashboard是IntelliJ IDEA中的工具【也就是View中的Services】&#xff0c;提供一个可视化界面&#xff0c;用于管理控制应用程序的运行和调试过程。 在Run DashBoard中&#xff0c;可以看到所有的运行配置&#xff0c;以及每个配置的运行状态&#xff08;正在运行&#xf…...

【力扣白嫖日记】SQL

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1407.排名靠前的旅行者 表&#xff1a;Users 列名类型idintnamevarchar id 是该表中具有唯一值的列。name …...

自动化报告pptx-python|高效通过PPT模版制造报告(三)

这是自动化报告学习的第三篇了,前面两篇分别是: 自动化报告的前奏|使用python-pptx操作PPT(一)自动化报告pptx-python|如何将pandas的表格写入PPTX(二)本篇是逼着笔者看到JoStudio 大佬自己写的一个jojo-office 库,基于pptx-python开发成一套试用office软件的依赖,非…...

Linux升级openssh的解决方案

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

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读 YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读一、前言二、我的环境三、yolov5s.yaml源文件内容四、Parameters五、anchors配置六、backbone七、head八、总结 OLOv5-第Y2周&#xff1a;训练自己的数据集) YOLOv5白皮书-第Y3周:yolov5s.…...

C++ pair+map+set+multimap+multiset+AVL树+红黑树(深度剖析)

文章目录 1. 前言2. 关联式容器3. pair——键值对4. 树形结构的关联式容器4.1 set4.1.1 set 的介绍4.1.2 set 的使用 4.2 map4.2.1 map 的介绍4.2.2 map 的使用 4.3 multiset4.3.1 multiset 的介绍4.3.2 multiset 的使用 4.4 multimap4.4.1 multimap 的介绍4.4.2 multimap 的使…...

指针的学习1

目录 什么是指针&#xff1f; 野指针 造成野指针的原因&#xff1a; 如何避免野指针&#xff1f; 内存和指针 如何理解编址&#xff1f; 指针变量和地址 取地址操作符& 指针变量和解引用操作符 指针变量 如何拆解指针类型&#xff1f; 指针变量的大小 指针变量…...

c++:敲桌子

先输出1-100数字&#xff0c;从100个数字中找到这些特殊数字改为敲桌子。 特殊数字&#xff1a;1.7的倍数 2.十位数上有7 3.个位数上有7 #include<iostream> using namespace std; int main() {for (int i 1; i < 100; i) {if (i / 10 7 || i % 10 7|| i % 7 0)…...

Linux中判断文件系统的方法

文章目录 Linux中判断文件系统的方法1.使用mount命令2.使用blkid命令3.使用file命令4.使用fstab文件5.使用df命令&#xff08;这个用的比较多&#xff09;6.使用fsck命令7.使用lsblk命令(推荐-简单好用) Linux中判断文件系统的方法 1.使用mount命令 # 这样查看的只有已经挂载…...

聊聊ClickHouse MergeTree引擎的固定/自适应索引粒度

前言 我们在刚开始学习ClickHouse的MergeTree引擎时&#xff0c;就会发现建表语句的末尾总会有SETTINGS index_granularity 8192这句话&#xff08;其实不写也可以&#xff09;&#xff0c;表示索引粒度为8192。在每个data part中&#xff0c;索引粒度参数的含义有二&#xf…...

20240202在WIN10下使用whisper.cpp

20240202在WIN10下使用whisper.cpp 2024/2/2 14:15 【结论&#xff1a;在Windows10下&#xff0c;确认large模式识别7分钟中文视频&#xff0c;需要83.7284 seconds&#xff0c;需要大概1.5分钟&#xff01;效率太差&#xff01;】 83.7284/4200.1993533333333333333333333333…...

【Linux】基本指令(上)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:Linux ⚙️操作环境:Xshell (操作系统:CentOS 7.9 64位) 目录 Xshell快捷键 Linux基本指令 ls指令 pwd指令 cd指令 touch指令 mkdir指令 rmdir指令/rm指令 结语 Xshell快捷键 AltEnter 全屏/取消全屏 Tab 进…...

【DB2】—— 一次关于db2 sqlcode -420 22018的记录

情况描述 在DB2 10.5数据库中执行以下SQL语句&#xff1a; SELECT * FROM aa WHERE aa.ivc_typ IN (213,123,12334,345)其中aa.ivc_typ列的类型为VARCHAR(10) 关于执行会发生以下情况 类型转换&#xff1a;SQL引擎会尝试把IN列表中的整数常量转换为VARCHAR(10)类型&#xf…...

账簿和明细账

目录 一. 账簿的意义和种类二. 明细账 \quad 一. 账簿的意义和种类 \quad 账簿是由一定格式、互有联系的账页组成&#xff0c;以审核无误的会计凭证为依据,用来序时地、分类地记录和反映各项经济业务的会计簿籍&#xff08;或称账本&#xff09;。设置和登记账簿是会计工作的重…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...