antd table排序会触发到分页怎么解决_多年管理系统开发经验总结~代码解决方案...
来源 | 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的方法,和状态存储 ,确定我们想要的,避免无效代码
关于以上的问题,我基于以往的项目,整理了一下管理系统的组件结构思路,希望可以在你的项目开发中提供一些帮助
#概述
公共结构
关于一个管理系统,使用最多的便是增删改查,主要的逻辑是对数据的操作,基于以往的项目可以提取以下部分的公共结构
数据流向
- 搜索排序分页通过操作的参数获取,列表的展示数据
- 列表操作区会根据删除或者修改后,重新获取列表数据
零 · 项目准备
- 此次针对 搜索 列表 分页 区域
- 使用react作范例,版本号如下
壹 · 存储搜索参数数据+列表展示区
搜索和分页数据需要统一存储
顶端组件代码和效果展示
搜索组件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组件:负责整个页面的结构和逻辑处理
效果展示
数据存储统一管理
- 弹窗数据统一管理
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> );}复制代码
叁 · 列表权限控制
根据不同的权限配置,展示不同的列表项
效果展示
权限配置
使用对象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)
❝
写代码之前一定要让自己的思路清晰,进行思维碰撞后的你开发起来会更小的得心应手
❞
最后
期许每个项目组猿们写代码都有一个统一清晰规范的思路,那无论你的换项目,还是交接给其他人都是可以无缝衔接
点个在看支持下
antd table排序会触发到分页怎么解决_多年管理系统开发经验总结~代码解决方案...相关推荐
- antd table排序 vue_ant-design-vue中的table取消默认不排序的状态
ant-design-vue中的table组件具有排序的属性,该排序属性有三种状态:升序.降序和不排序.在项目开发中,有时产品经理会要求排序时只能有升序或降序两种状态,而table组件中却没有相应的A ...
- antd table 排序如何使用_antd table按表格里的日期去排序操作
表格内容 根据票据日期升序(这里是已经排序后的效果) 上代码 代码中data的内容如下 根据paper_date排序,因为目前这种格式不支持比较,需要先转换成时间戳 new Date(aTimeStr ...
- antd table 排序如何使用_Antd Table列字符串排序+数字排序
在中后端WEB app开发过程中经常遇到table列排序的问题,Antd table 提供了sorter的接口,我们可以根据各自项目特点拓展即可. 1.Number类型数据排序,官方提供了number ...
- antd table排序 vue_商品品牌业务之Vue编写前端页面
今天是刘小爱自学Java的第145天. 感谢你的观看,谢谢你. 学习计划安排如下: 打算从前端页面到后台服务器代码完整地写一遍,但显然我高估了自己的实力,几个小时的时间根本不够用. 并且因为教程和vu ...
- antd table排序 vue_antd of Vue 之table组件踩坑记
需求:页面里有个table,点击编辑可以编辑该table,保存数据并展示到页面上来 第一种方法就是把编辑态的table做成子组件(且叫editeTable),通过v-show判断是否进入编辑态来显示隐 ...
- antd table 时间搜索_antd table按表格里的日期去排序操作
表格内容 根据票据日期升序(这里是已经排序后的效果) 上代码 代码中data的内容如下 根据paper_date排序,因为目前这种格式不支持比较,需要先转换成时间戳 new Date(aTimeStr ...
- bootstrap table排序php,BootStrap+Table排序分页序号
这次给大家带来BootStrap+Table排序分页序号,BootStrap+Table排序分页序号的注意事项有哪些,下面就是实战案例,一起来看一下. 前言在使用bootstrap table的时候难 ...
- antd表格显示分页怎么取消_react antd分页后,表格筛选后不能触发重新分页
如图,参照官网表格demo,为表格添加分页的total(图一),当按Age为32进行筛选后,分页没进行刷新,实际筛选出来的应该是7条而不是16条(图二),如果把表格的pagination属性去掉使用a ...
- antd 设置表头属性_解决react使用antd table组件固定表头后,表头和表体列不对齐以及配置fixed固定左右侧后行高度不对齐...
一.固定表头后表体列和表头不对齐 此问题可能在antd3.24.0版本之前都存在,反正3.16.2版本是存在这个问题的,如果是3.24.0之前的版本估计只能通过修改css样式解决. 按照官网说的: 1 ...
最新文章
- python selenium 浏览器设置_python+selenium webdriver.firefox()方式配置浏览器设置
- Oracle 11g r2 安装
- 深度学习用途广:Nvidia工程师机智赶跑草坪上撒野的邻家喵星人
- 简单网页制作html语言,html基本操作,看了这些你就能做简易网页
- (非原)如何让.net开发的Winform程序快速释放内存
- 洛谷 P1800 software_NOI导刊2010提高(06)(二分答案+DP检验)
- 图像马赛克原理及实现
- 跟我学Windows7的33个技巧(二)
- 编译 php mysql 依赖包_MySQL 5.5.15源码包编译安装
- 1971旗舰cpu intel_CPU的历史
- 如何在 Java 中正确使用 wait, notify 和 notifyAll?
- 使用ISAPI_Rewrite对asp.net实现URL重写伪静态
- 文件夹去掉git版本控制_git 从版本控制中删除文件及.gitignore的用法
- xm文件转换为mp3_怎么才能将M4A转换为MP3?秘籍公开
- 几个常用的shell脚本
- Atitit java onvif 开源类库 getProfiles getStreamUri
- java值传递人体自_请大家帮帮我这个初学者
- 矩阵标准型的系数是特征值吗_「线性代数」根据特征值,将二次型化为标准形、规范形...
- 云知声语音语义识别,语音唤醒和语音合成简单工具类封装
- javascript 域名合法性检测