### tdesign-react 版本 1.18.4。也核对了当前 develop:`d31df33c40a774d435fd00580f72d99f4d271cf0`,对应 useRowSelect 源码与发布包 source map 一致。 ### 重现步骤 普通非树形表格,6 条数据,每页 2 条,设置 `reserveSelectedRowOnPaginate={false}`,调用表头全选后,onSelectChange 的 keys 和 selectedRowData 包含全部 6 条数据,而不是当前页的 2 条。 下面是调用发布包原始 hook 和实际表头 onChange handler 的最小复现。它使用 React test-renderer,**不是完整 Table DOM 或浏览器交互验证**;浏览器回归会另行补充。 在空目录安装并将下方代码保存为 repro.jsx: ```sh npm install --save-exact react@18.3.1 react-dom@18.3.1 react-test-renderer@18.3.1 tdesign-react@1.18.4 esbuild@0.25.12 npx esbuild repro.jsx --bundle --platform=node --format=cjs --loader:.css=empty --outfile=repro.cjs NODE_ENV=test node repro.cjs ``` ```jsx import React from 'react'; import TestRenderer, { act } from 'react-test-renderer'; import useRowSelect from 'tdesign-react/es/table/hooks/useRowSelect.js'; const data = Array.from({ length: 6 }, (_, i) => ({ id: i + 1 })); const column = { colKey: 'row-select', type: 'multiple' }; let selection; let result; const props = { data, columns: [column], rowKey: 'id', defaultSelectedRowKeys: [], pagination: { current: 1, pageSize: 2, total: 6 }, reserveSelectedRowOnPaginate: false, onSelectChange(keys, context) { result = { keys, selectedRowData: context.selectedRowData.map(row => row.id) }; }, }; const classes = { disabled: 'disabled', selected: 'selected', checkCell: 'check' }; function Probe() { selection = useRowSelect(props, classes); return null; } let renderer; act(() => { renderer = TestRenderer.create(<Probe />); }); console.log('currentPaginateData:', selection.currentPaginateData.map(row => row.id)); act(() => selection.formatToRowSelectColumn(column).title().props.onChange(true)); console.log('onSelectChange:', JSON.stringify(result)); act(() => renderer.unmount()); ``` 实际输出: ```text currentPaginateData: [ 1, 2 ] onSelectChange: {"keys":[1,2,3,4,5,6],"selectedRowData":[1,2,3,4,5,6]} ``` ### 期望结果 false 模式下当前页为 [1,2],全选回调的 keys 和 selectedRowData 应仅包含 [1,2]。初始第二页 [3,4] 以及更新当前页数据后也应遵守当前页范围。 [当前类型说明](https://github.com/Tencent/tdesign-react/blob/d31df33c40a774d435fd00580f72d99f4d271cf0/packages/components/table/type.ts#L480-L484) 明确说明 false 时全部选中停留在当前页,不跨分页。 ### 实际结果与排查范围 - 第一页、初始第二页、更新分页数据后的 hook 级复现,均返回全部 6 条数据。 - true 模式选择所有页、无分页模式选择全部数据、取消全选,这些对照用例保持通过。 - [useRowSelect](https://github.com/Tencent/tdesign-react/blob/d31df33c40a774d435fd00580f72d99f4d271cf0/packages/components/table/hooks/useRowSelect.tsx) 中,普通表格的 allTreeRows 仍为完整 data,因此 `allTreeRows || currentPaginateData` 优先取得完整数据。 - 本问题只针对 false 的当前页约定,不把 true 模式跨页全选当成错误,也不涉及树形表格的选择语义。 ### 环境 Linux;Node.js 24.19.0;React / react-test-renderer 18.3.1。以上输出为实际运行结果,目前没有浏览器版本或截图可报告。 已查看 FAQ、当前 CHANGELOG、相关问题与开放 PR。调查和复现使用了 AI 辅助;未声称人工或真实浏览器验证。
Activity
github-actions commentedon Oct 6, 2026
👋 @dvd233,感谢给 TDesign 提出了 issue。
请根据 issue 模版确保背景信息的完善,我们将调查并尽快回复你。
dvd233 commentedon Oct 6, 2026
我来处理这个普通表格 false 模式的问题,会补当前页全选、切页、取消全选以及 true/树形模式不回归的测试,并补真实浏览器验证。计划保持 API 和默认跨页行为不变;如果发现远程分页或受控分页需要额外改动,会先明确边界。
RylanBot commentedon Oct 8, 2026
duplicated as #3228