聊聊antdesign表格在分页情况下,如何在react中实现跨页后选中的数据还在

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

今天在写项目时,遇到一个前端分页展示的表格,需要在跨页时保留之前选中的数据,但由于我们是动态向后端请求的数据,所以需要前端来保留这个数据。


一、子组件

我们可以在表格单选或者全选的时候给该行数据添加一个标识来判断当前行是否选中或该页数据是否被全选。

代码如下(示例):

//表格的配置项 

selectTableKey(a,b,c)//该方法为传回父组件的方法(第一个参数是选中的key-数组,第二个参数是选中的数据-数组,第三个参数是用于父组件判断是单选还是多选)

//selectedRows为父组件传回的shang上一次选中的全部数据

  const rowSelection = {

    selectedRowKeys, // 选中的行key

    onChange: onSelectChange, // 选中行变化时的回调

    onSelect: (record: list, selected: boolean) => {

      // 选中行

      const arr: list[] = [{

        ...record,

        isSelect: selected

      }]

      selectTableKey(arr, 0)

    },

    onSelectAll: (selected: boolean, rows: list[], changeRows: list[]) => {

      if (selected) {

        // 全选

        rows = rows.map((el: list) => ({

          ...el,

          isSelect: selected

        }))

      } else {

        // 取消全选

        rows = selectedRow.map((el: list) => ({

          ...el,

          isSelect: changeRows.some((item: list) => item.key === el.key)

        }))

      }

      selectTableKey(rows, 1)

    }

  }

  //监听到父组件传回的数据,更新表格数据及选中状态

  useEffect(() => {

    setSelectedRows(selectTableData)

    setSelectedRowKeys(selectTableData.map(el=>el.key))

  }, [selectTableData])

二、父组件

代码如下(示例):

  // 获取右边表格选中数据

  const [selectedTableKeys, setSelectedTableKeys] = useState([]);

  const [selectTableData, setSelectTableData] = useState([]);

  //没有选中,找到该项删除,反之添加

  const selectTableKey = useCallback((selectKeys, selectArr, type) => {

    let  newArr = selectTableData

    // type-0单选 type-1多选

    if (!type) {

      if (!selectArr[0].isSelect) {

        const findIndex = newArr.findIndex(el => selectArr[0].key === el.key)

        newArr.splice(findIndex, 1)

      } else newArr.push(selectArr[0])

    } else {

      selectArr.forEach(item => {

        const findIndex = newArr.findIndex(el => item.key === el.key)

        if (findIndex === -1 && item.isSelect && item.key)newArr.push(item)

        else if (findIndex !== -1 && !item.isSelect)newArr.splice(findIndex, 1)

      })

    }

    setSelectedTableKeys(newArr.map(el => el.key));

    setSelectTableData(newArr);

  }, [selectedTableKeys]);


总结

总的来说这个功能还是非常简单的,也是记录自己第一次写这个需求,小白一枚,如果有更好的方法以及错误的地方,欢迎大家纠正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值