iter(g254): 派生后页码越界回写内核状态

This commit is contained in:
HIsheR
2026-10-26 22:14:44 +08:00
parent dec3a9ff8a
commit 43af4cf29d
7 changed files with 42 additions and 8 deletions
@@ -193,4 +193,21 @@ swapped.subscribe(() => (notified += 1));
swapped.setRows(sameRows);
assert(notified === 1 && swapped.getVisibleRows().total === 4, 'setRows 换引用:通知一次并重算 total');
// 页码收敛:数据缩水后越界页码范围回生效页,state 与视图保持一致(不再滞留旧页码)
const clamp = createTable({
data: users,
columns: [{ key: 'name', header: 'Name' }],
rowKey: 'id',
plugins: [paginationPlugin()],
initialState: { pagination: { page: 3, pageSize: 2 } },
});
assert(clamp.getVisibleRows().rows.length === 1 && clamp.getPageInfo().page === 3, '收敛前:5 行 / 每页 2 = 3 页,停在第 3 页');
clamp.setRows(users.slice(0, 1)); // 只剩 1 行 → 总页数 1
assert(clamp.getPageInfo().page === 1 && clamp.getState().pagination.page === 1, '数据缩水后:越界页码回写为 1(state 与生效页一致)');
clamp.setRows(users); // 数据恢复 5 行
assert(clamp.getVisibleRows().rows.length === 2 && clamp.getState().pagination.page === 1, '数据恢复后:仍停第 1 页,不记忆已失效的旧页码');
clamp.dispatch({ type: 'setPage', page: 9 }); // 显式跳到越界页
assert(clamp.getVisibleRows().rows.length === 1 && clamp.getState().pagination.page === 3, '跳越界页:派生钳制后回写为末页 3');
assert(clamp.getPageInfo().totalPages === 3, '收敛不改分页快照语义(totalPages 仍按 total 推算)');
console.log('SMOKE OK');