antd Table表格分页数据为动态获取时,切换页码后保留之前页面选中数据状态的实现,以及数据刷新后选中状态仍保留问题的解决

本文档介绍了一种在Ant Design Table组件中实现分页数据选中状态跨页保留的方法。通过定义当前页选中数据key值数组和所有选中数据数组,监听选中操作并更新状态。在页码切换时,根据已选中的数据确定新页面的选中状态。代码示例展示了如何封装Table组件以及使用场景。

问题:

antd Table提供了数据行可选择的操作,但是如果分页数据是从后端获取,切换页码后之前的分页数据就没有了,回到之前的页面选中状态也无法保留。

解决:

这里对ant Table表格组件进行了封装,实现了在分页数据动态获取时切换页码其他页选中的数据和状态仍保留的功能

思路:

1.定义curPageSelectedRowKeys存储当前页选中数据的key值数组,selectedRows存储所有选中数据
2.监听当前页数据选中/取消选中和全选/取消全选操作,更新curPageSelectedRowKeys和selectedRows
3.当页码切换时根据selectedRows来确定当前页面哪些数据是选中状态从而确定curPageSelectedRowKeys

组件代码:

/*
 * @Author: liu
 * @Date: 2021-08-24 14:35:53
 * @LastEditTime: 2021-09-08 22:11:01
 * @LastEditors: Please set LastEditors
 * @Description: 表格自定义选中项,前端分页,分页后保留之前选中数据
 * @FilePath: \chq-datamarket-frontend\src\apps\views\shared\customSelectTable\customSelectTable.tsx
 */
import React, {
   
    useEffect, useState } from "react";
import {
   
    Pagination, Table } from "antd";
interface CustomSelectTableProps {
   
   
  columns: any[]; //表格列
  dataSource: any[]; //表格数据(当前页)
  curPageSelectedRowKeys: number[]; //当前页选中数据key值数组
  curPageSelectedRowKeysChange: (key: any[]) => void; //curPageSelectedRowKeys改变
  selectedRows: any[]; //所有选中数据
  selectedRowsChange: (row: any[]) => void;
  pageOption: {
   
   
    //分页参数
    page: number;
    pageChange: (page) => void;
    pageSize: number;
    sizeChange: (size: number) => void;
    totalCount: number;
    showSizeChanger?: boolean;
    pageSizeOptions?: any[];
  };
  tableClass?: string;
}
export default function customSelectTable(props: CustomSelectTableProps) {
   
   
  useEffect(() => {
   
   
    updateSelectData();
  }, [props.dataSource]);

  const rowSelection = {
   
   
    selectedRowKeys: props.curPageSelectedRowKeys,
    onSelect: (record, selected, selectedRows, nativeEvent) => {
   
   
      onSelectChange(record, selected, selectedRows);
    },
    onSelectAll: onSelectAll,
    hideDefaultSelections: true
  };
  /**
   * 更新选中数据,当表格数据变化后,重新计算当前页选中数据
   */
  function updateSelectData() {
   
   
    const curPageSelectIndex = [];
    const {
   
    selectedRows } = props;
    if (selectedRows && selectedRows.length) {
   
   
      props.dataSource.map(d => {
   
   
        selecte
使用antd table组件进行分页获取数据,需要在表格中设置pagination属性,同需要在后端接口中实现分页查询功能。 对于跨页多选,antd table提供了rowSelection属性,可以通过设置type为checkbox实现多选,但是默认只能在当前页进行选择,无法跨页选择。 要实现跨页多选,需要自定义rowSelection的selectedRowKeys和onChange方法。具体步骤如下: 1. 在state中定义selectedRowKeys数组,用于保存已选中的行的key值。 2. 在rowSelection属性中设置selectedRowKeys为state中定义的selectedRowKeys数组。 3. 在rowSelection属性中定义onChange方法,用于处理选中行的变化。在该方法中,需要使用setState更新state中的selectedRowKeys数组。 4. 在表格的pagination属性中设置onChange方法,用于处理页码变化清空已选中的行。 以下是示例代码: ``` import React, { Component } from 'react'; import { Table } from 'antd'; class MyTable extends Component { state = { selectedRowKeys: [], // 保存已选中的行的key值 }; onSelectChange = selectedRowKeys => { // 更新state中的selectedRowKeys数组 this.setState({ selectedRowKeys }); }; onPaginationChange = () => { // 清空已选中的行 this.setState({ selectedRowKeys: [] }); }; render() { const { selectedRowKeys } = this.state; const rowSelection = { type: 'checkbox', selectedRowKeys, onChange: this.onSelectChange, }; return ( <Table rowSelection={rowSelection} columns={columns} dataSource={data} pagination={{ onChange: this.onPaginationChange }} /> ); } } ``` 注意,以上代码仅为示例,具体实现需要根据实际情况进行调整。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值