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

不知道大家是不是在AntDesign的某一个列表想要做一个批量导出或者操作的时候,发现只要选择下一页,即使选中的ids 都有记录下面,但是就是不回显
在这里插入图片描述
后来问了chatGPT,对方的回答是:
在Ant Design的DataTable组件中,当进行分页操作时,会重新渲染表格内容,这会导致之前选中的行数据和选中状态丢失。

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

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重新处理

this.dispatch(
      actions.tableRowSelectionChangeAction(
          this.tableId,
          map(selectedRowKeys, (value) => {
              return value;
          })
      )
  );

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值