主要是利用
rowSelection配置项中的onSelect,onSelectAll 回调
下面是用ts写完整的代码
/**
* @description 表格选择行配置项
*/
export const useRowSelection = <T>() => {
const [checkedRowKeys, setCheckedRowKeys] = useState<Key[]>([])
const [checkedRows, setCheckedRows] = useState<T[]>([])
const rowSelection: TableRowSelection<T> | undefined = {
selectedRowKeys: checkedRowKeys,
fixed: true,
onSelect: (record, selected, selectedRow) => {
if (selected) {
// 添加
// @ts-ignore
setCheckedRowKeys([...checkedRowKeys, record.accountsOrder])
setCheckedRows([...checkedRows, record])
} else {
// @ts-ignore
const subCheckedKeys = checkedRowKeys.filter((item: Key) => item !== record.accountsOrder)
// @ts-ignore
const subCheckedRows = checkedRows.filter((item: T) => item.accountsOrder !== record.accountsOrder)
setCheckedRowKeys(subCheckedKeys)
setCheckedRows(subCheckedRows)
}
},
onSelectAll: (selected, selectedRows, changeRows) => {
if (selected) {
const addCheckedKeys = changeRows.map((item: T) => {
// @ts-ignore
return item.accountsOrder
})
setCheckedRowKeys([...checkedRowKeys, ...addCheckedKeys])
setCheckedRows([...checkedRows, ...changeRows])
} else {
const subCheckedKeys = checkedRowKeys.filter((ite: Key) => {
return !changeRows.some((item: T) => {
// @ts-ignore
return item.accountsOrder === ite
})
})
const subCheckedRows = checkedRows.filter((ite: any) => {
return !changeRows.some((item: T) => {
// @ts-ignore
return item.accountsOrder === ite.accountsOrder
})
})
setCheckedRowKeys(subCheckedKeys)
setCheckedRows(subCheckedRows)
}
},
columnWidth: 64,
// selections: [
// Table.SELECTION_ALL,
// Table.SELECTION_INVERT,
// Table.SELECTION_NONE
// ],
type: 'checkbox'
}
return {
checkedRowKeys,
checkedRows,
setCheckedRowKeys,
setCheckedRows,
rowSelection
}
}