Antd中Table列表行默认包含修改及删除功能的封装方法
作者:曲鸟 发布时间:2024-08-07 17:41:27
标签:Antd,Table,列表行,封装
一、前言
ant-design是非常不错、方便的一款前端组件库,而这次用到的ProComponents则是在 Ant Design 上进行了自己的封装,更加易用,与 Ant Design 设计体系一脉相承,无缝对接 antd 项目,样式风格与 antd 一脉相承,无需魔改,浑然天成。一些预设行为也达到了更少的代码,更少的 Bug的目的。
这里我使用ProComponents的editable-table时发现它的表格默认自带了修改删除功能:
代码封装的actionRender
方法提供了相应的参数来使用默认的修改删除:
自己使用的项目也有非常多的表单,大部分都包含修改删除功能,所以对我来讲也是非常实用的,但它的修改是在行内编辑,我的需要弹窗编辑,所以这里根据自己的思路封装了一下,下面分享给大家。
二、给Table封装默认的修改、删除功能
整个封装过程把思路理清楚了也能很简单的实现,首先是将弹窗方法(不同功能的表单会有差异)传递给封装的公共Table:
//弹窗方法
const showModal = (type: string, values: any = {}) => {
values['formType'] = type;
setFormData(values);
setFormVisible(true);
};
传递给table:
<LimTable
actionRef={ref}
columns={columns}
func={UserView}
showModal={showModal}
headerTitle="用户列表"
/>
然后在公共Table组件中定义默认表单的操作方法(修改,删除)这里只提供思路,代码不适用于你的项目:
//默认的表单操作dom
const defaultColumnDom = {
update: (record: any) => (
<a key="update" onClick={() => showModal(PATCH, record)}>
修改
</a>
),
delete: (record: any) => (
<a
key="delete"
onClick={() => {
deleteDataFunc(func, record.id);
}}
>
删除
</a>
),
};
然后放入设置表单操作栏的方法中:
//设置表单options(操作栏)的方法
const setDefualtColumnsOptions = () => {
for (let i = 0; i < columns.length; i++) {
if (columns[i].dataIndex === 'option') {
if (!optionRender) {
//没有配置optionRender则默认增加修改、删除功能
columns[i].render = (_: any, record: any) => [
defaultColumnDom.update(record),
defaultColumnDom.delete(record),
];
} else {
columns[i].render = (_: any, record: any) =>
optionRender({ update: defaultColumnDom.update(record), delete: defaultColumnDom.delete(record) }, record);
}
break;
}
}
};
最后加入useEffect中即可完成:
useEffect(() => {
setDefualtColumnsOptions();
}, []);
三、实现效果
当我们不传递optionRender
时,列表默认携带修改、和删除功能:
当我们传递了optionRender
时,列表根据传递的渲染操作栏:
只包含修改功能
<LimTable
actionRef={ref}
columns={columns}
func={UserView}
optionRender={(dom: any) => [dom.update]}
showModal={showModal}
headerTitle="用户列表"
/>
包含修改功能并附加文字:
<LimTable
actionRef={ref}
columns={columns}
func={UserView}
optionRender={(dom: any) => [dom.update, '曲鸟']}
showModal={showModal}
headerTitle="用户列表"
/>
这样我们又封装好了一个组件了,减少了后面编码的重复性工作,也间接减少了BUG的产生。
来源:https://blog.csdn.net/momoda118/article/details/127995864


猜你喜欢
- 直接上代码图片就使用我家爽妹子的吧如果没有安装pil模块的话先cmd安装下输入:pip install pillow# -*- coding
- 导言:接上期,我们在极坐标下用python画了圆,心形线,玫瑰线,阿基米德螺线和双纽线5大常规曲线外,后来发现还漏了好一些漂亮且有意思的的曲
- 运行平台: WindowsPython版本: Python3.xIDE: Spyder今天我们想实现的功能是对单个目标图片的提取如图所示:图
- 1、使用MySQLdb读取出来的数据是unicode字符串,如果要写入redis的hash中会变成"{u'eth0_out
- 这篇文章主要介绍了Python django框架输入汉字,数字,字符转成二维码实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作
- 前言大家好,我是辣条相信大家都能感觉到最近天气的多变,好几次出门半路天气转变。辣条也深受其扰,直接给我整感冒,就差被隔离起来了,既然天气我没
- 看代码:Vue提供了强大的前端开发架构,很多时候我们需要判断数据对象是否为空,使用typeof判断是个不错选择,具体代码见图。补充知识:vu
- 实现二维平面上散点的绘制,并可以给每个散点标记序号或者名称:import numpy as npimport matplotlib.pypl
- 目录前言1. 效果图2. 原理3. 源码3.1 Numpy实现傅里叶变换3.2 OpenCV实现傅里叶变换3.3 HPF or LPF?参考
- 网页设计遇到最大的麻烦之一莫过于网页对不同浏览器的兼容性问题了,因为IE 6.0 / IE 7.0 / firefox 2 / Opera
- 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。当 * 作对象数目不大时,
- 今天因为做一个效果的时候需要CSS的定位来实现,于是我就根据自己原来对CSS的了解,用absolute和relative摆弄了好一阵子,总是
- Python数据类型之间的转换函数描述int(x [,base])将x转换为一个整数long(x [,base] )将x转换为一个长整数fl
- 一、什么是v-bind指令v-bind指令用于响应更新HTML特性,允许将一个或多个属性动态绑定到表达式。v-bind是应用在动态属性上面的
- python如何更新修改后的Python模块1.利用python的MySQLdb模块利用原生的sql语句进行更新的方法代码配置方法代码2.使
- 一、工具python3第三方类库requestspython3-pyqt5(GUI依赖,不用GUI可不装)ubuntu系列系统使用以下命令安
- 在网上看到一个小需求,需要用正则表达式来处理。原需求如下:找出文本中包含”因为……所以”的句子,并以两个词为中心对齐输出前后3个字,中间全输
- 本文实例讲述了Python中unittest的用法,分享给大家供大家参考。具体用法分析如下:1. unittest module包含了编写运
- 安装librtmp包需要依赖环境较多,机器上已经安装了python2.7版本,安装librtmp包之前需要先安装依赖环境。1、安装gcc和依
- 本文实例总结了Python常用的小技巧。分享给大家供大家参考。具体分析如下:1. 获取本地mac地址:import uuidmac = uu