经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » React » 查看文章
为React Ant-Design Table增加字段设置
来源:cnblogs  作者:京东云开发者  时间:2023/11/17 9:19:13  对本文有异议

最近做的几个项目经常遇到这样的需求,要在表格上增加一个自定义表格字段设置的功能。就是用户可以自己控制那些列需要展示。

在几个项目里都实现了一遍,每个项目的需求又都有点儿不一样,迭代了很多版,所以抽时间把这个功能封装了个组件:@silverage/table-custom,将这些差别都集成了进去,方便今后使用和维护。同时也方便需要这个功能的人来使用。

下面介绍下安装和使用

安装

  1. npm i @silverage/table-custom --save
  2. yarn add @silverage/table-custom
  3. pnpm add @silverage/table-custom

组件在ant-design基础上开发,所以你也要安装antd。数据持久化使用的use-local-storage-state,也是要安装的。另外,react也是peer dependency。

使用

组件使用非常简单,只需要将你原先antd的<Table />换成<TableCustom />即可。兼容所有antd table的属性。

  1. import { TableCustom } from '@silverage/table-custom'
  2. <TableCustom columns={columns} dataSource={dataSource} />

table-custom

鼠标悬浮在表格时,表格右上角就会出现齿轮 图标。点击之后就可进入设置界面。通过勾选就可以隐藏/展示列。

image.png

支持单行表头,同时也支持双层合并表头。

image.png

你可能注意到上面截图中,ID列是灰色的,这是因为在使用时,业务希望某些列是固定展示不可隐藏的。这时可以通过对column设置disableCustom: true来实现。

  1. const columns = [
  2. {
  3. title: `ID`,
  4. dataIndex: `id`,
  5. key: `id`,
  6. width: 100,
  7. fixed: 'left',
  8. disableCustom: true // here
  9. }
  10. ]

另外,修改后的列想要保存,这里有两个方式:一种是通过localstorage做持久化,一种是通过后端提供接口。不同的项目选择不同方式实现,最近的几个项目两种都用了。

localstorage的方式很简单,只需要提供组件storageKey属性即可。

  1. <TableCustom
  2. storageKey="myKey"
  3. columns={columns}
  4. dataSource={dataSource}
  5. />

接口方式,可通过savedColumnsonChecklistChange配合实现。

  1. const [savedColumns, setSavedColumns] = useState([])
  2. <TableCustom
  3. columns={columns}
  4. dataSource={dataSource}
  5. savedColumns={savedColumns ?? []}
  6. onChecklistChange={async checkedList => {
  7. const res = await api.request()
  8. setSavedColumns(res?.data)
  9. }}
  10. />

过了一段时间使用后,在某些项目中,“极个别同志(no one but you)”认为,这个齿轮的图标太不明显了,想在表格上面放个按钮来控制,所以加了如下属性,让用户自己控制。因为原有表格上方可能有其他按钮。

  1. const [visible, setVisible] = useState(false)
  2. <Button onClick={() => setVisible(true)}>Open</Button>
  3. <TableCustom
  4. columns={columns}
  5. dataSource={dataSource}
  6. openCustomModal={visible} // here
  7. onCustomModalClose={() => setVisible(false)} // and here
  8. />

又过了一段时间,为了今后必然出现的字段排序需求,又增加了排序功能,只需要设置sortable字段。

  1. <TableCustom
  2. columns={columns}
  3. dataSource={dataSource}
  4. sortable
  5. />

image.png

鼠标拖拽字段后的icon就可以,同样支持单层和双层表头!

也可以自定义icon样式:

  1. <TableCustom
  2. columns={columns}
  3. dataSource={dataSource}
  4. sortable
  5. sortHandler={<span>::</span>}
  6. />

查看完成文档:https://github.com/yuhongda/table-custom

Enjoy

作者:京东零售 于弘达

来源:京东云开发者社区 自猿其说 Tech 转载请注明来源

原文链接:https://www.cnblogs.com/Jcloud/p/17835721.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号