React AntDesign表批量操作时的selectedRowKeys回显选中

不知道大家是不是在AntDesign的某一个列表想要做一个批量导出或者操作的时候,发现只要选择下一页,即使选中的ids 都有记录下面,但是就是不回显

后来问了chatGPT,对方的回答是:

在Ant Design的DataTable组件中,当进行分页操作时,会重新渲染表格内容,这会导致之前选中的行数据和选中状态丢失。

于是最后想到了一个办法处理,通过onTableChange时间来控制

代码如下:

bash 复制代码
private onTableChange = (newSelectedRowKeys: string[]) => {
    console.log(newSelectedRowKeys);
    const { selectedRowKeys } = this.state;
    setTimeout(() => {
        this.dispatch(
            actions.tableRowSelectionChangeAction(
                this.tableId,
                map(selectedRowKeys, (value) => {
                    return value;
                })
            )
        );
    }, 300);
};

private onTableRowSelectAll = (
    selected: boolean,
    selectedRows: any[],
    unSelectedRows: any[]
) => {
    const { selectedRowKeys } = this.state;
    if (selected) {
        const addRows = selectedRows.filter((item: any) => {
            return !selectedRowKeys.includes(item.id);
        });
        const addRowsRowIds = map(addRows, 'id');
        this.setState({ selectedRowKeys: [...selectedRowKeys, ...addRowsRowIds] });
    } else {
        const deleteIds: any = map(unSelectedRows, 'id');
        const deleteRows = selectedRowKeys.filter((item: any) => {
            return !deleteIds.includes(item);
        });
        this.setState({ selectedRowKeys: [...deleteRows] });
    }
};

private onTableSelect = (record: any, selected: boolean) => {
    const { selectedRowKeys } = this.state;
    if (selected) {
        this.setState({
            selectedRowKeys: [...selectedRowKeys, record.id],
        });
    } else {
        this.setState({
            selectedRowKeys: selectedRowKeys.filter((key) => key !== record.id),
        });
    }
};

使用onTableChange 因为它是几个方法中最后一个执行的方法,也是必触发的方法,然后通过dispatch,对表的selectedRowKeys重新处理

bash 复制代码
this.dispatch(
      actions.tableRowSelectionChangeAction(
          this.tableId,
          map(selectedRowKeys, (value) => {
              return value;
          })
      )
  );

如果对大家有帮助,留下个小爱心吧😄

相关推荐
阿赛工作室12 分钟前
Vue中onBeforeUnmount不触发的解决方案
前端·javascript·vue.js
码王吴彦祖13 分钟前
顶象 AC 纯算法迁移实战:从补环境到纯算的完整拆解
java·前端·算法
小叶lr26 分钟前
jenkins打包前端样式丢失/与本地不一致问题
运维·前端·jenkins
浩星32 分钟前
electron系列1:Electron不是玩具,为什么桌面应用需要它?
前端·javascript·electron
ZC跨境爬虫1 小时前
Scrapy工作空间搭建与目录结构解析:从初始化到基础配置全流程
前端·爬虫·python·scrapy·自动化
小村儿1 小时前
连载04-最重要的Skill---一起吃透 Claude Code,告别 AI coding 迷茫
前端·后端·ai编程
_院长大人_1 小时前
Vue + ECharts 实现价格趋势分析图
前端·vue.js·echarts
IT_陈寒2 小时前
Vite的alias配置把我整不会了,原来是这个坑
前端·人工智能·后端
万物得其道者成2 小时前
Cursor 提效实战:我的前端 Prompt、审查 SKILL、MCP 接入完整方法
前端·prompt
酒鼎2 小时前
学习笔记(12-02)事件循环 - 实战案例 —⭐
前端·javascript