首页 > 其他分享 >antdPro proTable的一系列问题及解决方案

antdPro proTable的一系列问题及解决方案

时间:2023-07-01 18:13:22浏览次数:35  
标签:const 勾选 解决方案 selected record selectedRowKeys proTable selectedRows antdPro

一  使用editableProTable表头筛选,无法重置

解决思路:

1.使用ref.current.reloadAndRest(),去重置整个表单,不起作用!!!

2.通过查看antd table文档发现可以通过table的onchange事件去获取filters的值,并在colums中配置filteredValue。示例:https://ant.design/components/table-cn#components-table-demo-reset-filter。

但是editableProTable的onchange事件为了方便使用 EditableProTable 增加了一些预设,关掉了查询表单和操作栏,同时修改了 value 和 onChange 使其可以方便的继承到 antd 的 Form 中。在onchange事件中无法拿到filters,导致无法手动清除。!!!

 3. 考虑给table假一个key值,通过key值的变化,是整个table重新渲染。成功清除!!! 

代码如下:

const [uuid, setUuid] = useState(UUID()) // 重置 const reset = () => {   setUuid(UUID())   actionRef.current.reloadAndRest() }

 

<EditableProTable<Member>   key={uuid}   rowKey="id"   ...... /> 驻:UUID()是一个随机生成一段字符串的方法 const UUID = function (type?: string): string {   const value = create(type)   const id = value.replace(/-/g, '')   return id } 二。proTable的跨页面勾选

问题:在当前页面的列表勾选一条数据,点击翻页,在翻页后的列表勾选数据,会导致之前勾选的数据自动取消,只勾选当前数据。

解决思路:数据勾选涉及到selectedRowKeys,针对这个字段做处理

1.useState设置selectedRows和selectedRowKeys

const [selectedRows, setSelectedRows] = useState<Member[]>([]) // 多选对象集合 const [selectedRowKeys, setSelectedRowKeys] = useState<Key[]>([]) // 多选的key值集合 2.在onSelect事件中对selectedRowKeys和selectedRows做处理。onSelectAll全选事件,同样如此。 /** * rowSelection onSelect 记录所有 selectedRowKeys / selectedRows * @param record 当前勾选的数据 * @param selected 当前操作是勾选(true)还是取消勾选(false) * @param selectedRowKeys 之前已经被勾选的数据 * @param rowKey 处理的字段,方便定位到对象中的字段 * @returns selectedRowKeys  */ const getOnRowSelectedKeys = <T>(record: T, selected: boolean, selectedRowKeys: Key[], rowKey: Key): Key[] => {   const iRowKey = (record as any)[rowKey]   if (selected) {     return [...selectedRowKeys, iRowKey]   }   return selectedRowKeys.filter((k: Key) => k !== iRowKey) } const getOnRowSelected = <T>(record: T, selected: boolean, selectedRows: T[]): T[] => {   if (selected) {     return [...selectedRows, record]   }   return selectedRows.filter((d: T) => !_.isEqual(d, record)) }

3.在proTable中配置rowSelection,代码如下:

rowSelection={{   selectedRowKeys,   onSelect: (record: Member, selected: boolean) => {     setSelectedRowKeys(getOnRowSelectedKeys<Member>(record, selected, selectedRowKeys, 'id'))     setSelectedRows(getOnRowSelected<Member>(record, selected, selectedRows))   },   onSelectAll: (selected: boolean, selectedRowsEx: Member[], changeRows: Member[]) => {     setSelectedRowKeys(getOnRowSelectedKeysAll<Member>(selected, changeRows, selectedRowKeys, 'id'))     setSelectedRows(getOnRowSelectedAll<Member>(selected, changeRows, selectedRows))   }, }}

4. 如果需要清除勾选项,clearSelected会失效,需要手动清除

// 刷新列表 const reloadList = () => {   actionRef.current.reload()   actionRef.current.clearSelected()   setSelectedRowKeys([])   setSelectedRows([]) } 三。删除操作。 删除当前页面的最后一项

删除后导致列表空白

 

问题:我们执行删除操作,只会刷新当前列表,当我们删除当前列表的最后一项时,只刷新列表会导致列表处于空白,不会自动跳转到前一页。 解决思路:对删除操作进行一个判断。判断当前删除的数量是否大于等于当前页面的totals。如果是,就重置列表,不是,就刷新列表。代码如下: const handleDelete = (_record: any, type: string) => {   Modal.confirm({     title: intled('请注意'),     content: intled('是否删除') + '?',     okText: intled('确认'),     cancelText: intled('取消'),     onOk: async () => {       let query = {         ids: type === 'single' ? [_record.id] : selectedRowKeys,       }       const { code, message: msg } = await userFileDelete(query)       if (code === 0) {         if (query.ids.length >= totals) {           actionRef.current.reloadAndRest()         } else {           reloadList()         }         messageApi.success(msg)       } else {         messageApi.error(msg)       }     },   }) } 四。在proTable中翻页后,在其中一条数据点击详情发生跳转,点击返回后直接返回到列表第一页,不会返回到跳转前的页。

 

 解决思路:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:const,勾选,解决方案,selected,record,selectedRowKeys,proTable,selectedRows,antdPro
From: https://www.cnblogs.com/liiann/p/17519664.html

相关文章

  • SpringBoot3.0最新深入浅出从入门到项目实战,突出Web应用痛点解决方案
    SpringBoot3.0最新深入浅出从入门到项目实战,突出Web应用痛点解决方案SpringBoot已经成为Java开发中最流行的框架之一,它提供了一种快速构建、易于扩展的方式,使开发人员能够更加专注于业务逻辑而不是繁琐的配置。而最新的SpringBoot3.0版本将进一步改善开发体验,并提供更多的解决方......
  • 常见的网络攻击原理及解决方案
    常见的网络攻击原理及解决方案常见的网纲攻击原理及解决方案网络安全是当今互联网时代不可忽视的话题,随着网络技术的发展,网络攻击也日益猖獗和复杂。网络攻击可能会给网站、应用、服务器、数据库等造成严重的损害,甚至导致数据泄露、资金损失、信誉受损等后果。因此,了解常见的网......
  • 应用服务跨域问题及各种解决方案以及对比
    应用服务跨域问题及各种解决方案以及对比什么是跨域问题?跨域问题是指浏览器为了安全性,限制了不同源的web项目之间的数据交互。所谓的源,就是由协议、域名和端口三部分组成的标识。如果两个web项目的源不完全相同,那么它们就构成了跨域。跨域问题会给web开发带来很多困扰,比......
  • 智慧能源物联网解决方案:能源监测及节能平台
    近些年来,随着环保意识与节能降耗政策的逐渐推广,很多传统企业意识到能源监测与节能系统的重要性,但所采用的数据采集方式却没有与时俱进,依旧利用人工对各种仪器仪表进行抄表、记录和汇总。这种能源管理模式存在效率低、不及时、误差大等问题,无法实现大规模的数据采集需求。因此,建立企......
  • 智慧能源物联网解决方案:能源监测及节能平台
    近些年来,随着环保意识与节能降耗政策的逐渐推广,很多传统企业意识到能源监测与节能系统的重要性,但所采用的数据采集方式却没有与时俱进,依旧利用人工对各种仪器仪表进行抄表、记录和汇总。这种能源管理模式存在效率低、不及时、误差大等问题,无法实现大规模的数据采集需求。因此,建立企......
  • 【SpringBoot】RedisTemplate自动注入失败原因及解决方案
    报错:packagecom.example.springdataredisdemo;importorg.junit.jupiter.api.Test;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.data.redis.co......
  • 【js学习笔记十四】普通函数中的this指向问题解决方案_this
     目录前言导语 解决思路运行结果前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语歌谣歌谣......
  • 【js学习笔记十五】普通函数中的this指向问题解决方案箭头函数
     目录前言导语 解决思路运行结果前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语歌谣歌谣......
  • CC2541是功率优化的真正系统级芯片(SoC)解决方案,适用于蓝牙低功耗(BLE)和专用的2.4GH
    CC2541是功率优化的真正系统级芯片(SoC)解决方案,适用于蓝牙低功耗(BLE)和专用的2.4GHz应用.该SOC芯片集成性能极好RF收发器以及标准工业级增强型8051内核,支持系统编程Flash,8KRAM及强大功能支持跟外设。微信号:13632658391 深圳市动能世纪科技有限公司成立于2000年,是一家IC集成......
  • Windows服务启动exe无界面终极解决方案
      1、前言我这个方案(C#操作)是彻底解决【从Windows服务启动程序exe,程序无界面】问题的终极解决方案,终极方案,绝对的终极方案,本来打算收钱的,还是算了,你们也不容易,关注我一下就行。后附代码下载地址。由于安全性问题,Vista以后的Windows都会出现该问题,从服务中调用/启动其他程序......