useTable
概述
useTable 是一个基于 TanStack Query (React Query) 和 Ant Design 的自定义 Hook,用于简化表格数据的获取、分页、筛选、排序和 CRUD 操作。它提供了与 Ant Design 表格组件集成的状态管理和数据流控制,同时支持数据缓存、表单集成、批量操作等功能。
API 参考
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| listApiFn | (params: any) => Promise<ApiResponse<any>> | 是 | - | 获取列表数据的 API 函数 |
| deleteApiFn | (id: number) => Promise<void> | 否 | - | 删除单个项目的 API 函数 |
| batchDeleteApiFn | (ids: number[]) => Promise<void> | 否 | - | 批量删除项目的 API 函数 |
| key | string | 是 | - | 用于缓存的唯一键 |
| idKey | string | 否 | 'id' | 标识项目的唯一键字段名 |
| cacheEnabled | boolean | 否 | true | 是否启用缓存功能 |
| dataStaleTime | number | 否 | 600000 (10分钟) | 数据过期时间(毫秒) |
| pagination | boolean | 否 | true | 是否启用分页功能 |
| selectable | boolean | 否 | false | 是否启用行选择功能 |
| formInitialValues | Record<string, any> | 否 | {} | 查询表单的初始值 |
| columns | TableProps<any>['columns'] | 是 | - | 表格列配置 |
| scrollX | string | number | 否 | '100%' | 表格水平滚动宽度 |
| scrollY | number | string | 否 | - | 表格垂直滚动高度 |
| pageCreatePath | string | 否 | - | 创建页面的路径 |
| pageEditPath | string | 否 | - | 编辑页面的路径 |
返回值
表单相关
| 属性 | 类型 | 描述 |
|---|---|---|
form | FormInstance | 表单实例,用于访问和控制表单 |
表格相关
| 属性 | 类型 | 描述 |
|---|---|---|
tableProps | TableProps | 表格属性,可直接绑定到 <Table> 组件 |
状态指示器
| 属性 | 类型 | 描述 |
|---|---|---|
isLoading | boolean | 是否正在加载数据 |
isDeleting | boolean | 是否正在删除单条数据 |
isBatchDeleting | boolean | 是否正在批量删除数据 |
数据
| 属性 | 类型 | 描述 |
|---|---|---|
data | ApiResponse<any> | undefined | 原始 API 响应数据 |
list | any[] | 处理后的数据列表 |
total | number | 数据总数 |
事件处理
| 方法 | 类型 | 描述 |
|---|---|---|
handleSearch | () => Promise<void> | 执行搜索操作 |
handleReset | () => Promise<void> | 重置表单并刷新数据 |
handleCreate | (transferData?: Record<string, any> | null, query?: Record<string, any>) => Promise<void> | 跳转到创建页面 |
handleEdit | (data: any, transferData?: Record<string, any> | null, query?: Record<string, any>) => Promise<void> | 跳转到编辑页面 |
handleDelete | (id: number) => Promise<void> | 删除单条数据 |
handleBatchDelete | () => Promise<void> | 批量删除选中的数据 |
选择相关
| 属性/方法 | 类型 | 描述 |
|---|---|---|
selectedState | number[] | 当前选中行的 ID 数组 |
selectedCount | number | 当前选中行的数量 |
selectedIsEmpty | boolean | 是否没有选中任何行 |
setSelectedState | (keys: number[]) => void | 设置选中行 |
resetSelectedState | () => void | 重置选中行 |
缓存管理
| 方法 | 类型 | 描述 |
|---|---|---|
clearSavedState | () => void | 清除缓存的查询状态 |
分页相关(当 pagination 为 true 时可用)
| 属性 | 类型 | 描述 |
|---|---|---|
currentPage | number | 当前页码 |
setPage | (page: number) => void | 设置页码的函数 |
currentPageSize | number | 每页记录数 |
setPageSize | (pageSize: number) => void | 设置页大小的函数 |