perf(CompanyOverview): hooks 支持 enabled 延迟加载和刷新

- 所有 hooks 参数改为 options 对象形式
- 新增 enabled 参数支持延迟加载
- 新增 refreshKey 参数支持手动刷新
- 智能初始化 loading 状态,避免首次渲染闪现空状态

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
zdl
2025-12-19 18:53:30 +08:00
parent 672e746a26
commit 298ac5a335
6 changed files with 132 additions and 38 deletions

View File

@@ -11,6 +11,13 @@ interface ApiResponse<T> {
data: T;
}
// 支持延迟加载的配置选项
interface UseDisclosureDataOptions {
stockCode?: string;
/** 是否启用数据加载,默认 true */
enabled?: boolean;
}
interface UseDisclosureDataResult {
disclosureSchedule: DisclosureSchedule[];
loading: boolean;
@@ -18,16 +25,21 @@ interface UseDisclosureDataResult {
}
/**
* 披露日程数据 Hook
* @param stockCode - 股票代码
* 披露日程数据 Hook(支持延迟加载)
* @param options - 配置选项
* @param options.stockCode - 股票代码
* @param options.enabled - 是否启用数据加载,默认 true
*/
export const useDisclosureData = (stockCode?: string): UseDisclosureDataResult => {
export const useDisclosureData = (options: UseDisclosureDataOptions): UseDisclosureDataResult => {
const { stockCode, enabled = true } = options;
const [disclosureSchedule, setDisclosureSchedule] = useState<DisclosureSchedule[]>([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
if (!stockCode) return;
// 只有 enabled 且有 stockCode 时才请求
if (!enabled || !stockCode) return;
const controller = new AbortController();
@@ -57,7 +69,7 @@ export const useDisclosureData = (stockCode?: string): UseDisclosureDataResult =
loadData();
return () => controller.abort();
}, [stockCode]);
}, [stockCode, enabled]);
return { disclosureSchedule, loading, error };
};