// src/views/Company/components/CompanyOverview/hooks/useAnnouncementsData.ts // 公告数据 Hook - 用于公司公告 Tab import { useState, useEffect } from "react"; import { logger } from "@utils/logger"; import axios from "@utils/axiosConfig"; import type { Announcement } from "../types"; interface ApiResponse { success: boolean; data: T; } interface UseAnnouncementsDataResult { announcements: Announcement[]; loading: boolean; error: string | null; } /** * 公告数据 Hook * @param stockCode - 股票代码 */ export const useAnnouncementsData = (stockCode?: string): UseAnnouncementsDataResult => { const [announcements, setAnnouncements] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { if (!stockCode) return; const controller = new AbortController(); const loadData = async () => { setLoading(true); setError(null); try { const { data: result } = await axios.get>( `/api/stock/${stockCode}/announcements?limit=20`, { signal: controller.signal } ); if (result.success) { setAnnouncements(result.data); } else { setError("加载公告数据失败"); } } catch (err: any) { if (err.name === "CanceledError") return; logger.error("useAnnouncementsData", "loadData", err, { stockCode }); setError("网络请求失败"); } finally { setLoading(false); } }; loadData(); return () => controller.abort(); }, [stockCode]); return { announcements, loading, error }; };