【antd】Table组件勾选功能:分页后拼接勾选的行数组

478 阅读1分钟

项目中遇到这样的问题:在用Table组件勾选功能的时候,在涉及到分页时,我需要拿到两页勾选的数组,但是打印出来的selectedRows总是当前页的数据,(参考第三张照片)

image.png

image.png

image.png

这个是组件自身的问题,和身边同事讨论出一个比较好的处理方法:二维数组拼接

具体思路:将selectedRowKeys作为参数值

具体操作代码如下:

单选操作:
onSelect: (record, selected, selectedRows) => {
      setSelectedRowKeys([]);
      if(selected) {
        setSelectedRowKeys([...selectedRowKeys, record.id]);  
      }else {
        let arr = [...selectedRowKeys];
        let index = arr.indexOf(record.id);
        arr.splice(index, 1);
        setSelectedRowKeys(arr);
      }
    },
批量选中操作:
 onSelectAll: (selected, selectedRows, changeRows) => {
      if (selected) {
        const newArrayList = [...selectedRowKeys, ...selectedRows.filter(item => item !== undefined).map(item => item.id)];
        setSelectedRowKeys([...new Set(newArrayList)]);
      } else {
        let arr = [...selectedRowKeys];
        for (  let i = 0; i < changeRows.length; i++ ) {
          for ( let j = 0; j < arr.length; j++ ) {
            if (arr[j] === changeRows[i].id) {
              arr.splice(j, 1);
              j--;
            }
          }
        }
        setSelectedRowKeys(arr);
      }
    },

最后就能拿到两页总的selectedRows数组了~