fix(DeepAnalysis): 修复行业排名数据未加载导致无法点击弹窗问题
- TAB_API_MAP 改为数组形式,支持一个 Tab 加载多个 API - strategy Tab 现在同时加载 comprehensive 和 industryRank 数据 - loadTabData 更新为遍历加载所有映射的 API - currentLoading 计算改为检查任一相关 API 的 loading 状态 - 初始加载逻辑更新为加载 strategy Tab 的所有数据 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -7,23 +7,23 @@
|
||||
* - 竞态条件处理
|
||||
*/
|
||||
|
||||
import { useState, useCallback, useRef, useEffect } from 'react';
|
||||
import axios from '@utils/axiosConfig';
|
||||
import { logger } from '@utils/logger';
|
||||
import { useState, useCallback, useRef, useEffect } from "react";
|
||||
import axios from "@utils/axiosConfig";
|
||||
import { logger } from "@utils/logger";
|
||||
import type {
|
||||
ApiKey,
|
||||
ApiLoadingState,
|
||||
DataState,
|
||||
UseDeepAnalysisDataReturn,
|
||||
} from '../types';
|
||||
import { TAB_API_MAP } from '../types';
|
||||
} from "../types";
|
||||
import { TAB_API_MAP } from "../types";
|
||||
|
||||
/** API 端点映射 */
|
||||
const API_ENDPOINTS: Record<ApiKey, string> = {
|
||||
comprehensive: '/api/company/comprehensive-analysis',
|
||||
valueChain: '/api/company/value-chain-analysis',
|
||||
keyFactors: '/api/company/key-factors-timeline',
|
||||
industryRank: '/api/financial/industry-rank',
|
||||
comprehensive: "/api/company/comprehensive-analysis",
|
||||
valueChain: "/api/company/value-chain-analysis",
|
||||
keyFactors: "/api/company/key-factors-timeline",
|
||||
industryRank: "/api/financial/industry-rank",
|
||||
};
|
||||
|
||||
/** 初始数据状态 */
|
||||
@@ -48,7 +48,9 @@ const initialLoadingState: ApiLoadingState = {
|
||||
* @param stockCode 股票代码
|
||||
* @returns 数据、loading 状态、加载函数
|
||||
*/
|
||||
export const useDeepAnalysisData = (stockCode: string): UseDeepAnalysisDataReturn => {
|
||||
export const useDeepAnalysisData = (
|
||||
stockCode: string
|
||||
): UseDeepAnalysisDataReturn => {
|
||||
// 数据状态
|
||||
const [data, setData] = useState<DataState>(initialDataState);
|
||||
|
||||
@@ -91,7 +93,9 @@ export const useDeepAnalysisData = (stockCode: string): UseDeepAnalysisDataRetur
|
||||
loadedApisRef.current[apiKey] = true;
|
||||
}
|
||||
} catch (err) {
|
||||
logger.error('DeepAnalysis', `loadApiData:${apiKey}`, err, { stockCode });
|
||||
logger.error("DeepAnalysis", `loadApiData:${apiKey}`, err, {
|
||||
stockCode,
|
||||
});
|
||||
} finally {
|
||||
// 清除 loading(再次检查 stockCode)
|
||||
if (currentStockCodeRef.current === stockCode) {
|
||||
@@ -103,13 +107,13 @@ export const useDeepAnalysisData = (stockCode: string): UseDeepAnalysisDataRetur
|
||||
);
|
||||
|
||||
/**
|
||||
* 根据 Tab 加载对应数据
|
||||
* 根据 Tab 加载对应数据(支持一个 Tab 对应多个 API)
|
||||
*/
|
||||
const loadTabData = useCallback(
|
||||
(tabKey: string) => {
|
||||
const apiKey = TAB_API_MAP[tabKey];
|
||||
if (apiKey) {
|
||||
loadApiData(apiKey);
|
||||
const apiKeys = TAB_API_MAP[tabKey];
|
||||
if (apiKeys && apiKeys.length > 0) {
|
||||
apiKeys.forEach((apiKey) => loadApiData(apiKey));
|
||||
}
|
||||
},
|
||||
[loadApiData]
|
||||
@@ -134,8 +138,11 @@ export const useDeepAnalysisData = (stockCode: string): UseDeepAnalysisDataRetur
|
||||
if (stockCode) {
|
||||
currentStockCodeRef.current = stockCode;
|
||||
resetData();
|
||||
// 只加载默认 Tab(comprehensive)
|
||||
loadApiData('comprehensive');
|
||||
// 加载默认 Tab (strategy) 所需的所有数据
|
||||
const defaultTabApis = TAB_API_MAP["strategy"];
|
||||
if (defaultTabApis) {
|
||||
defaultTabApis.forEach((apiKey) => loadApiData(apiKey));
|
||||
}
|
||||
}
|
||||
}, [stockCode, loadApiData, resetData]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user