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…

蓝牙小电池图标_提高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;它利用计算机来进行生产设备办理控制和操作的进程。它输入信息是零件的工艺道路和工序内容&…

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

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

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

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

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

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

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

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

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

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

小米air耳机重新配对_横比小米 Air 2s 和 OPPO Enco W31:同一颗芯玩出的大不同

2019 年 9 月&#xff0c;小米发布了新一代小米真无线蓝牙耳机 Air 2&#xff0c;采用半入耳式设计、支持蓝牙连接时的弹窗动画、支持小爱同学语音交互&#xff0c;价格依旧平民的 399 元&#xff0c;是小米高级产品总监李创奇眼中「一款体验接近 AirPods 的产品」。时隔半年&a…

裸金属服务器能虚拟化吗,裸金属服务器虚拟化概述

裸金属服务器虚拟化概述 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。SAP HANA运行在裸金属服务器上。需要根据部署场景&#xf…

获得分辨率_变分辨率宽幅面光固化3D打印,

作者 陈锐光&#xff0c;连芩 光固化3D打印以实现高分辨率著称&#xff0c;使用面曝光方式的设备还具有成型速度快的优点。但传统的面曝光设备存在着实现宽幅面和高分辨率的矛盾&#xff0c;由于镜头像素的限制&#xff0c;在提高其中一项性能的时候&#xff0c;会牺牲另一项。…

后宫宛如传服务器维护,合服丨《后宫宛如传》合服公告

合服活动活动时间&#xff1a; 3月25日合服结束后 至 4月8日 23:59:59※活动期间 任意5天&#xff0c;每天登录即可领取一份奖励&#xff0c;奖励包括 服装单品和 道具。累计登录5天并领取活动奖励&#xff0c;即可获得 限定套装泼墨流裙。※服装细节(点击图片查看大图)合服规则…

属性子集选择的基本启发方法_一文看懂数据预处理最重要的3种思想和方法

导读&#xff1a;本文我们考虑应当采用哪些预处理步骤&#xff0c;让数据更加适合挖掘。数据预处理是一个广泛的领域&#xff0c;包含大量以复杂的方式相关联的不同策略和技术。我们将讨论一些最重要的思想和方法&#xff0c;并试图指出它们之间的相互联系。作者&#xff1a;陈…

荣耀系统更新服务器不可用,荣耀确认系统更新方式 4月1日前发布的机型固件升级由华为负责...

近期&#xff0c;根据华为陆续发布的荣耀老机型鸿蒙HarmonyOS的路线图来看&#xff0c;荣耀手机 、平板等12款机型已经赫然在列。而随后&#xff0c;也引起了网友们对于荣耀产品系统更新的讨论&#xff0c;毕竟华为与荣耀分家之后&#xff0c;对于荣耀产品的系统更新一直是不少…

一个服务器上放多个网站,一个云服务器放多个网站吗

一个云服务器放多个网站吗 内容精选换一换如果您使用华为云云速邮箱作为企业邮箱&#xff0c;并在Web端管理使用&#xff0c;此时需要为邮箱绑定域名&#xff0c;通过域名访问网页版邮箱。本节介绍使用华为云云速邮箱&#xff0c;且网站域名解析至中国大陆节点服务器的网站备案…

electron开发_基于Electron+React的跨平台应用程序基础开发框架

介绍Electron React Boilerplate是Github上超过12kstar的可扩展跨平台应用程序开发框架&#xff0c;Electron 是基于HTMLCSSJavascript等 Web 技术创建原生程序的框架&#xff0c;它已经帮我们搞定了最难搞的部分&#xff0c;而Electron React Boilerplate在其基础上进行了扩展…