antd table排序会触发到分页怎么解决_多年管理系统开发经验总结~代码解决方案...

83f760a4717f11e6e007fd7d48fab5cf.png

来源 | juejin.im/user/870468939940184  

作者 | 前端小月月

背景

最近的你有没有接手的新项目,对这个有什么感觉?我最近接手了一个项目,先不论是否代码行数的多少,仅是思路就很混乱,像是一件衣服在打补丁,而衣服上还有混乱的线网,数据绕来绕去,和断掉的线头,举例说明下

关于补丁

  • 没有对数据进行扩展处理,一个值一个变量。例如:获取数据详情返回的多个对象,便依次存储多个对象,这样在参数变更时,便要不停地补充参数,如果你使用的是react,就会发现大量的state还没有注释它是用来干什么的,不管对于维护者,还是初入者都是不友好的,其实我们可以存储在一个变量里,在使用时直接调用对象的参数
  • 列表的列表项[1,2,3,4,5]的展示,可能会根据权限展示不同的列表,刚开始是1,2,3,根据==1,==2,==3,后来变成1,2,3,4,就。。。。
  • 其实我们根据业务场景是否可以传入一个数组arr=[1,2,3,4],根据includes判断是否在数组内(此处会在列表展示区做详细解释)

关于线网

  • 把父级组件的静态数据number=3,和回调方法传给子类,回调方法里使用的却是,子类传回来的父类的静态数据number

关于断掉的线头

  • 例如使用antd的Tabs:如果只是单纯的点击切换模块,没有进行模块的特殊处理,则不需要onChange的方法,和状态存储 ,确定我们想要的,避免无效代码

关于以上的问题,我基于以往的项目,整理了一下管理系统的组件结构思路,希望可以在你的项目开发中提供一些帮助

#概述

公共结构

关于一个管理系统,使用最多的便是增删改查,主要的逻辑是对数据的操作,基于以往的项目可以提取以下部分的公共结构

f8dbd4f09b235fbf9149a2047df6030d.png

数据流向

  • 搜索排序分页通过操作的参数获取,列表的展示数据
  • 列表操作区会根据删除或者修改后,重新获取列表数据
9de256d33155b7699bae2c7b0be8e651.png

零 · 项目准备

  • 此次针对 搜索 列表 分页 区域
  • 使用react作范例,版本号如下
10e736b27279846498ff254ae3a97aef.png

壹 · 存储搜索参数数据+列表展示区

搜索和分页数据需要统一存储

3e961a4ca8339aedb43e798e7f0b549a.gif

顶端组件代码和效果展示

d21c53369c488a9047911a7c375320bc.png

搜索组件SearchForm.js

import React from "react";
import { Form, Input, Button } from "antd";

const SearchDemo = (props) => {
const [form] = Form.useForm();

const onFinish = (values) => {
console.log(values);
props.getListBySearch(values);
};
return (
<Formlayout="inline"form={form}name="control-hooks"style={{ width: 400 }}onFinish={onFinish}
><Form.Item name="nameKey" label="姓名"><Input placeholder="请输入姓名关键字" />Form.Item><div><Button type="primary" htmlType="submit">
SubmitButton>div>Form>
);
};
export default SearchDemo;复制代码

列表及分页组件

import React from "react";
import { Button, Table } from "antd";
import EditContent from "./EditContent";
export default function TableList(props) {
const { list = [], total, getListByPage, pageConfig } = props;
const columns = [
{
title: "姓名",
dataIndex: "name",
key: "name"
},
{
title: "年龄",
dataIndex: "age",
key: "age"
},
{
title: "住址",
dataIndex: "address",
key: "address"
},
];

function changPage(page, pageSize) {
getListByPage({ current: page, pageSize });
}
return (
<Tablestyle={{ marginTop: 20 }}size="small"dataSource={list}columns={columns}pagination={{...pageConfig,total: total,onChange: changPage
}}
/>
);
}复制代码

贰·列表操作区+列表展示区

列表操作可能同时存在多个弹窗,需对弹窗组件做统一参数处理,利用数据柯里化把父级参数运输到子组件内

数据统一管理

业务逻辑层指index.js组件:负责整个页面的结构和逻辑处理

3deebd7dcd6eda38f3b770d034febf15.png

效果展示

f9c5bfdaf73dc686eac82926b931738b.png

数据存储统一管理

  • 弹窗数据统一管理
 const [modalProps, setModalProps] = useState(dataSource.length);
复制代码
  • 使用柯里化父级传递参数统一管理
    footer={null}
{...modalProps}
maskClosable={false}
onCancel={() => setModalProps({ visible: false })} >
{modalProps.content && modalProps.content(commonProps)} {/* 使用柯里化对数据传递进行处理*/}
</Modal>复制代码

列表组件新增操作项

 {
title: "操作",
dataIndex: "operation",
key: "operation",
render: (text, record) => {
return (
<ButtononClick={() =>
setModalProps({
visible: true,
content: (commonProps) => (/*跨级传递父级参数*/<EditContent record={record} {...commonProps} />
)
})
} >
修改Button>
);
}
}复制代码

修改组件

import React from "react";
import { Button } from "antd";
export default function EditContent(props) {
const { record, editItem, setModalProps } = props;
const item = { name: "修改后的名字" };
return (
<div>
{item.name}<ButtononClick={() => {
editItem({ ...record, ...item });
setModalProps({ visible: false });
}} >
修改Button>div>
);
}复制代码

叁 · 列表权限控制

根据不同的权限配置,展示不同的列表项

效果展示

51237f32d5d28d897e5fa25c31a5c105.png

权限配置

使用对象roleObj的权限配置方案,比if(){}else{}更简介直观

const [roleArr, setRoleArr] = useState([]);
const roleObj = {
0: [],
1: ["address", "operation"],
2: ["name", "age"]
};
。。。
<Radio.GrouponChange={(e) => setRoleArr(roleObj[e.target.value])}
defaultValue={0}
><Radio value={0}>展示全部Radio><Radio value={1}>不展示操作和地址Radio><Radio value={2}>不展示姓名和年龄Radio>Radio.Group>div>复制代码

列表控制

根据传过来的数组,进行列表项的过滤

style={{ marginTop: 20 }}
size="small"
dataSource={list}
columns={columns.filter((item) => !roleArr.includes(item.key))}
pagination={{
...pageConfig,
total: total,
onChange: changPage
}}
/>
复制代码

肆 · 总结

针对前期的痛点,我们一一进行总结 完整代码[1]

关于补丁

在处理查询参数时,我们对查询数据进行了搜索和分页的分类存储,但是都保存在一个变量里,如果后期加排序或者其他参数,不会影响之前的逻辑,可以在原有基础上进行扩展,有效减少补丁的数量对弹窗参数数据的统一存储,可以拓展弹窗的title或者其他属性,不需要在添加state来打补丁,直接增加modalProps属性即可

关于线网

把数据的加工都统一放在了业务逻辑层指index.js进行数据处理,提供给其他组件相应的处理函数对弹窗组件进行柯里化处理,不仅可以避免给列表传递非必要的参数,减少组件的刷新,还可以方便的跨级传递父级参数

关于断线

在进行权限的处理时,我们并不需要存储单选框的值,直接对数据进行处理即可(有的猿可能会存个state,通过state去更新选中的value)

写代码之前一定要让自己的思路清晰,进行思维碰撞后的你开发起来会更小的得心应手

最后

期许每个项目组猿们写代码都有一个统一清晰规范的思路,那无论你的换项目,还是交接给其他人都是可以无缝衔接

点个在看支持下 5cd95176b5388e6d43b5fd835ab7abb4.gif

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

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

相关文章

如何占用计算机内存,电脑内存占用太高怎么办 教你电脑内存不够用解决方法...

现在很多白领买电脑&#xff0c;都会优先考虑电脑的续航和便捷&#xff0c;因为他们买电脑主要也就办办公&#xff0c;看看电影&#xff0c;又不玩大型游戏&#xff0c;所以高性能对他们来说也没什么必要。笔记本电脑但现在市面上续航久&#xff0c;便携性比较高的Intel电脑&am…

3d怎么把两个面拼接在一起_vr全景看房用什么软件做的?3D看房是怎么拍摄的?...

以往“看房跑断腿”的时代在vr全景看房出现后就得到了很大的解决&#xff0c;如今疫情和“宅经济”的双重影响下&#xff0c;各行各业不得不寻求线上转型&#xff1b;而vr全景对于房地产等行业便是一个很好的转型方式。vr全景看房也被一些朋友称之为是3D看房和VR看房&#xff0…

武汉计算机应用中职学校,武汉市中职学校计算机应用基础课程抽考.Doc

武汉市中职学校计算机应用基础课程抽考(试卷编号&#xff1a;22&#xff0c;考试时间100分钟&#xff0c;满分100分)题号四五六总分得分评卷人得 \o "关于PowerPoint中对象的动画的描述中(  )是错误的。 _x0007_" .一、单项选择 (共20题&#xff0c;合计10分)下列选…

蓝牙小电池图标_提高MacBook电池寿命的15个技巧

苹果的MacBook系列以其电池寿命著称。它们的电池续航时间一般都很好&#xff0c;按照苹果公司的标准&#xff0c;所有型号的电池续航时间都保证为10小时。然而&#xff0c;这里有很多附加的条款和条件&#xff0c;如果你想延长你的MacBook Pro或MacBook Air的电池寿命&#xff…

html转word 时 字体颜色,【Web前端问题】文字大小和颜色随着热度改变如何做?...

回答&#xff1a;提供一个思路&#xff1a;可以根据热度设置一个倍率&#xff0c;然后字体大小和背景透明度根据倍率设置回答&#xff1a;使用websocket,热度变化时,数据自动改变回答&#xff1a;回答&#xff1a;我提供一个我自己写的小demo我猜楼主的问题是不知道如何把颜色亮…

android实现qq修改密码底部弹出框_易查分强大的“可修改列”功能:轻松实现填表、留言和信息核对...

考试成绩公布了&#xff0c;想征求家长和学生的意见吗&#xff1f;给查询加个留言吧&#xff1b;需要家长填写一些表格&#xff0c;还在用QQ和微信群一个人一个人的留言粘贴吗&#xff1f;公布一些资料&#xff0c;想让家长自己核对一下有没有错误&#xff0c;家长还要告诉老师…

计算机程序的建立命令,数控车床编程指令 编程由一系列的指令组成

原标题&#xff1a;数控车床编程指令 编程由一系列的指令组成引言&#xff1a;数控程序员为数控机器编写指令&#xff0c;其中计算机连接到加工设备&#xff0c;以及完整系统的电气驱动器和传感器。这台计算机控制加工设备轴的运动。文章将以数控车床为例&#xff0c;介绍数控车…

软件数控编程_这么多CNC数控编程软件, 你觉得哪个好?

随着科技技能&#xff0c;数控加工对零件的杂乱度、精度、工艺等有了更高的要求&#xff0c;普通的人工编程难以担任&#xff0c;所以CAM(计算机辅助制作)软件应运而生&#xff0c;它利用计算机来进行生产设备办理控制和操作的进程。它输入信息是零件的工艺道路和工序内容&…

计算机图形学学习报告,计算机图形学学习报告.doc

计算机图形学学习报告篇一&#xff1a;计算机图形学学习心得体会计算机图形学学习心得体会计算机科学与技术与技术 班学号&#xff1a;1.计算机图形学计算机图形学(Computer Graphics&#xff0c;简称CG)&#xff0c;狭义上是一种研究基于物理定律、经验方法以及认知原理&#…

11 为了进一步_浅聊小米11发布会

到现在小米11的发布会也终于是结束了&#xff0c;小米11也带来了不少的惊喜下面一起来看看吧。处理器全球首发骁龙888处理器&#xff0c;骁龙作为安卓阵营的老大每一年的旗舰处理器都是十分值得期待的。按照惯例每一年的骁龙最新旗舰都会由三星首发&#xff0c;而这次小米11能够…

计算机雕刻教学设计,教学设计季花的雕刻方法.doc

食品雕刻的实例——直刻月季花的雕刻方法教学时间2010-12教学班级10 级烹饪( 1)(2) (3) 班学习目标&#xff1a;1、学习用直刻的方法雕刻月季花1、 知识目标2、教授学生掌握正确的用刀方法2、 能力目标3、要求学生在基本功方面加大练习力度3、 素养目标4、在教学中贯穿互相帮助…

固态函数不正确_一文解读quot;固态电容quot;的利与弊

固态电容采用了高分子电介质&#xff0c;固态粒子在高温下&#xff0c;无论是粒子澎涨或是活跃性均较液态电解液低&#xff0c;它的沸点也高达摄氏350度&#xff0c;因此几乎不可能出现爆浆的可能性。从理论上来说&#xff0c;固态电容几乎不可能爆浆。电子学习资料大礼包​mp.…

Win10怎么改网络服务器账号,win10系统设置网络的方法图解步骤

Win10系统怎么新建网络?最新版Win10连接的方法要比以前简单快速一点&#xff0c;只需要打开连接界面&#xff0c;再输入服务器地址&#xff0c;再输入用户名和账号就可以完成连接&#xff0c;具体怎么设置网络下面小编来告诉你吧。win10系统设置网络的方法步骤首先点击左下方的…

python处理pdf 层_Python处理PDF及生成多层PDF实例代码

Python提供了众多的PDF支持库&#xff0c;本文是在Python3环境下&#xff0c;试用了两个库来完成PDF的生成的功能。PyPDF对于读取PDF支持较好&#xff0c;但是没找到生成多层PDF的方法。Reportlab看起来更成熟&#xff0c;能够利用Canvas很方便的生成多层PDF&#xff0c;这样就…

web应用服务器计算资源核算,浅谈网络计算与应用.doc

浅谈网络计算与应用.doc浅谈网络计算与应用摘要&#xff1a;作为一种新型的分布计算技术,网格计算将地理上分布的、异构的资源 用高速网络连接在一起&#xff0c;集成一台高速的超级计算机。分析了网格计算的意义、 体系结构、资源管理、任务管理与任务调度、高速通信和安全等核…

dtft变换的性质_[2018年最新整理]DTFT变换.ppt

[2018年最新整理]DTFT变换信号和系统的分析方法有两种 时域分析方法 频率分析方法 序列的频域分析 z变换 序列的傅里叶变换(离散时间傅里叶变换) 模拟信号xa(t)的一对傅里叶变换式用下面公式描述 离散时间傅里叶变换(DTFT)的定义 &#xff1a; 例1 设x(n)RN(n)&#xff0c; 求x…

css 渐变 椭圆,CSS3圆角和渐变2种常用功能详解

Css3圆角讲解&#xff1a;想必大家对于图片&#xff0c;背景圆角&#xff0c;都不陌生吧&#xff0c;圆角语法&#xff1a;border-radius&#xff1a;圆角值&#xff1b;CSS3圆角的优点传统的圆角生成方案&#xff0c;必须使用多张图片作为背景图案。CSS3的出现&#xff0c;使得…

db2存储过程 可以使用游标循环嵌套吗_DB2存储过程使用动态游标的例子

本文将为您介绍一个DB2存储过程使用动态游标的例子&#xff0c;如果您对动态游标的使用感兴趣的话&#xff0c;不妨一看&#xff0c;对您学习DB2的使用会有所帮助。CREATE PROCEDURE data_wtptest( IN in_taskid_timestamp varchar(30),OUT o_err_no int,OUT o_err_msg varchar…

串口服务器信号连接不上,使用RS485串口服务器经常遇到的问题

1、为什么设备使用RS-485串口通信?RS-485设备可以连接到计算机&#xff0c;并在网络样式配置中的多个位置进行多次丢弃。在需要中继器之前&#xff0c;设备可以距离最远4000英尺(1220米)&#xff0c;最多可以连接32个节点(设备)。可以使用中继器连接更多节点&#xff0c;最多可…

move std 函数 示例_C++ STL迭代器辅助函数

advance(it, n) ---------- it 表示某个迭代器&#xff0c;n 为整数。该函数的功能是将 it 迭代器前进或后退 n 个位置。distance(first, last) ---------- first 和 last 都是迭代器&#xff0c;该函数的功能是计算 first 和 last 之间的距离。begin(cont) …