import { useState, useCallback } from 'react'; import { message } from 'antd'; interface PaginatedState { data: T[]; total: number; page: number; loading: boolean; } export function usePaginatedData( fetchFn: (page: number, pageSize: number, search: string) => Promise<{ data: T[]; total: number }>, pageSize = 20, ) { const [state, setState] = useState>({ data: [], total: 0, page: 1, loading: false, }); const [searchText, setSearchText] = useState(''); const refresh = useCallback(async (p?: number) => { const targetPage = p ?? state.page; setState(s => ({ ...s, loading: true })); try { const result = await fetchFn(targetPage, pageSize, searchText); setState({ data: result.data, total: result.total, page: targetPage, loading: false }); } catch { message.error('加载数据失败'); setState(s => ({ ...s, loading: false })); } }, [fetchFn, pageSize, searchText, state.page]); return { ...state, searchText, setSearchText, refresh }; }