import React from 'react'; interface ListResponse { code: number; data: { list: T[]; total: number; }; } interface DetailResponse { code: number; data: T; } //试验性质的封装,还没完全想清楚 interface useListResult { allIds: T[]; total: number; loading: boolean; loaded: boolean; } interface useDetailResult { detail?: T; setDetail?: (detail: T) => void; loading: boolean; loaded: boolean; } export const useList = ( request: (payload: object) => Promise>, payload: object = {}, deps: any[] = [], callback?: () => void ): useListResult => { const [allIds, setAllIds] = React.useState([]); const [loading, setLoading] = React.useState(false); const [loaded, setLoaded] = React.useState(false); const [total, setTotal] = React.useState(0); React.useEffect(() => { async function fetchData() { setLoading(true); try { const { code, data } = await request(payload); if (code === 0 || code === 200) { const { list, total } = data; setAllIds(list); setTotal(total); setLoaded(true); } } catch (error) {} setLoading(false); callback?.(); } fetchData(); }, deps); return { allIds, total, loading, loaded }; }; export const useDetail = ( request: (payload: object) => Promise>, payload: object = {}, deps: any[] = [], callback?: () => void ): useDetailResult => { const [detail, setDetail] = React.useState(); const [loading, setLoading] = React.useState(false); const [loaded, setLoaded] = React.useState(false); React.useEffect(() => { async function fetchData() { setLoading(true); try { const { code, data } = await request(payload); if (code === 0 || code === 200) { callback?.(); setDetail(data); setLoaded(true); } } catch (error) {} setLoading(false); } fetchData(); }, deps); return { detail, setDetail, loading, loaded }; };