Skip to content

概述

table 请求封装hook。

实例演示

typescript
// normal
const searchForm = reactive({})
const list = ref<ListItem[]>([]);
const listLoading = ref(false);
const page = reactive<PaginationProps>({
    current: 1,
    pageSize: 10,
    total: 0,
});
async function getTableList() {
    listLoading.value = true;
    try {
        const res = await queryTableList(params);
        list.value = res.data.list;
        page.total = res.data.page_info.count;
    } finally {
        listLoading.value = false;
    }
}
function tableChange() {
    getTableList();
}
...

// 🥳 useTable
const { list,listLoading,listLoading,getTableList,tableChange } = useTable({
    api: queryTableList,
    searchForm: {},
})

配置

useTableOption

参数说明类型默认值
api (必填)获取表格数据的后端接口Function--
searchForm表单搜索对象Record<string,any>{}
pagination自定义分页配置项PaginationProps--
extraParams搜索额外参数Function
pageKey当前页码参数Stringpage
pageSizeKey表格一页请求数量非特殊情况不要配置Stringpage_size
totalKey数据总数的 key,非特殊情况不要配置Stringmeta.pagination.total
formatHandle自定义格式化函数Function--
setSortField对整体数据进行排序,在tableChange 时触发Function--
formatSearchValue在请求之前调用一次来格式化参数Function--
formatTableSearchValue在请求时时格式化分页参数Function--
immediate初始化时立刻调用Booleanfalse
tabChangeCallback分页切换回调Function--

TableResult

参数说明类型备注
list表格数据,data-sourceArray
listLoading表格loading效果Boolean
page分页配置PaginationProps
getTableList获取(更新)表格数据方法Function
tableChange表格onChange事件Function
resetPagination重置表格分页Function

类型定义

typescript
export interface UseTableOptions<T, K extends Record<string, any>> {
  api?: (searchForm: K) => Promise<AxiosResponse<any>>;
  pagination?: PaginationProps;
  searchForm?: K;
  extraParams?: (searchForm) => Record<string, any>;
  pageKey?: string;
  pageSizeKey?: string;
  totalKey?: string;
  formatHandle?: (res: AxiosResponse<any>) => T[] | Promise<T[]>;
  setSortField?: (sorter: unknown) => void;
  formatSearchValue?: (searchForm?: K) => K & Record<string, any>;
  formatTableSearchValue?: (page: PaginationProps) => Record<string, any>;
  immediate?: boolean;
  tabChangeCallback?: () => void; // 切换分页时触发回调
}

export interface TableResult<T> {
  list: Ref<T[]>;
  listLoading: Ref<boolean>;
  page: PaginationProps;
  getTableList: (type?: string) => any;
  tableChange: (pagination: PaginationProps, _?: any, sorter?: unknown, source?: any, immediately?: boolean) => void;
  resetPagination: () => void;
}