Reactjs 可以控制Antd表的状态吗';s";勾选“全部”;控制

Reactjs 可以控制Antd表的状态吗';s";勾选“全部”;控制,reactjs,html-table,antd,Reactjs,Html Table,Antd,我有一个带有排序、选择和分页的Ant设计表。默认情况下(如果我理解正确的话),Antd表选择是基于每页的。如果单击选择列标题中的“全选”复选框,Antd将选择当前页面上的所有行,但如果随后更改页面,则行和标题都将恢复为未选中状态。选择不会丢失,因为如果返回上一页,行和标题都会被选中 所以我想改变这一点,让“全选”真正选择表中的所有行,而不考虑分页。我发现了一些github问题,其中建议只需自己管理selectedRowKeys数组onSelect和onSelectAll函数。我做到了这一点,现在

我有一个带有排序、选择和分页的Ant设计表。默认情况下(如果我理解正确的话),Antd表选择是基于每页的。如果单击选择列标题中的“全选”复选框,Antd将选择当前页面上的所有行,但如果随后更改页面,则行和标题都将恢复为未选中状态。选择不会丢失,因为如果返回上一页,行和标题都会被选中

所以我想改变这一点,让“全选”真正选择表中的所有行,而不考虑分页。我发现了一些github问题,其中建议只需自己管理selectedRowKeys数组onSelect和onSelectAll函数。我做到了这一点,现在我的选择工作的预期

然而

选择列标题中的“全选”复选框仍在页面行中起作用。例如,如果我在第一页上,选择“全选”,然后取消选择其中一行,“全选”复选框将处于预期的中间/部分状态。但是,如果我转到下一页,所有行都会按预期选中,标题中的“全选”复选框也会按预期选中。要使此选择在功能上有意义,它需要保持在中间/部分状态。它需要反映整个数据集的选择,而不仅仅是当前页面

这可以在这个简单的例子中看到:

你知道如何覆盖“全选”复选框吗


干杯

您可以通过
组件上的
行选择
道具来实现此效果。您需要在
onSelectAll
事件处理程序中以编程方式设置
selectedRowKeys
,以选择/取消选择所有表行,而不仅仅是活动页面上的行

请参见下面的CodeSandbox示例,了解您的用例的工作示例:


快乐编码

所以结果很简单。您只需将
列标题
添加到
行选择
道具中,并为其提供一个
复选框
,该复选框可以适当地处理自身


在TableRowSelection中有一个名为preserveSelectedRowKeys的新属性,允许保留选定的行键:

const rowSelection: TableRowSelection<CustomClass> = {
        preserveSelectedRowKeys: true,
        selectedRowKeys,
        onChange: this.onSelectChange,
};

onSelectChange = (selectedRowKeys: Key[], selectedRows: CustomClass[]) => {
    this.setState({ selectedRowKeys, selectedElements: selectedRows });
};
const rowSelection:TableRowSelection={
preserveSelectedRowKeys:true,
选择的箭头键,
onChange:this.onSelectChange,
};
onSelectChange=(selectedRowKeys:Key[],selectedRows:CustomClass[])=>{
this.setState({selectedRowKeys,selectedElements:selectedRows});
};

检查我的代码沙盒,这正是我正在做的。很好。只是目前似乎没有办法更改标题中“全部选中”复选框的道具。。。