refactor: 重构项目接口与API调用体系,统一类型管理
1. 合并拆分的API类型定义到统一的api/interface.ts文件 2. 删除旧的api/client.ts与api/types.ts文件 3. 重构所有页面与组件的API调用方式,统一使用api/index.ts导出的接口 4. 调整组件文件结构,将分散的组件按模块整理 5. 统一类型导入路径,移除冗余的类型重复定义
This commit is contained in:
5
src/hooks/interface.ts
Normal file
5
src/hooks/interface.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
import type { PageData, PageQuery } from "../api";
|
||||
|
||||
export type { PageData, PageQuery };
|
||||
|
||||
export type PageFetcher<T> = (query: PageQuery) => Promise<PageData<T>>;
|
||||
@@ -1,9 +1,4 @@
|
||||
import type { PageData } from '../api/types';
|
||||
|
||||
type PageQuery = {
|
||||
page: number;
|
||||
pageSize: number;
|
||||
};
|
||||
import type { PageData, PageQuery } from "./interface";
|
||||
|
||||
export function resolvePageData<T>(
|
||||
response: PageData<T>,
|
||||
|
||||
@@ -1,14 +1,8 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { fetchPage } from "../api/client";
|
||||
import type { PageData } from "../api/types";
|
||||
import type { PageData, PageFetcher, PageQuery } from "./interface";
|
||||
import { resolvePageData } from "./pageData";
|
||||
|
||||
type PageQuery = {
|
||||
page: number;
|
||||
pageSize: number;
|
||||
};
|
||||
|
||||
export function usePageData<T>(url: string, enabled = true) {
|
||||
export function usePageData<T>(fetcher: PageFetcher<T>, enabled = true) {
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [pageQuery, setPageQuery] = useState<PageQuery>({
|
||||
page: 1,
|
||||
@@ -25,7 +19,7 @@ export function usePageData<T>(url: string, enabled = true) {
|
||||
}
|
||||
setLoading(true);
|
||||
try {
|
||||
const response = await fetchPage<T>(url, query);
|
||||
const response = await fetcher(query);
|
||||
setData(resolvePageData(response, query));
|
||||
} finally {
|
||||
setLoading(false);
|
||||
@@ -40,7 +34,7 @@ export function usePageData<T>(url: string, enabled = true) {
|
||||
if (enabled) {
|
||||
void load(pageQuery);
|
||||
}
|
||||
}, [url, enabled, pageQuery.page, pageQuery.pageSize]);
|
||||
}, [fetcher, enabled, pageQuery.page, pageQuery.pageSize]);
|
||||
|
||||
return {
|
||||
data,
|
||||
|
||||
Reference in New Issue
Block a user