feat: feat: 实现事件详情子模块懒加载useEventStocks添加 autoLoad 参数和分离加载函数 │ │
│ │ - DynamicNewsDetailPanel实现子模块折叠和懒加载
This commit is contained in:
@@ -17,9 +17,11 @@ import { logger } from '../../../../../utils/logger';
|
||||
*
|
||||
* @param {string} eventId - 事件ID
|
||||
* @param {string} eventTime - 事件时间
|
||||
* @param {Object} options - 配置选项
|
||||
* @param {boolean} options.autoLoad - 是否自动加载数据(默认true)
|
||||
* @returns {Object} 事件数据和加载状态
|
||||
*/
|
||||
export const useEventStocks = (eventId, eventTime) => {
|
||||
export const useEventStocks = (eventId, eventTime, { autoLoad = true } = {}) => {
|
||||
const dispatch = useDispatch();
|
||||
|
||||
// 从 Redux 获取数据
|
||||
@@ -45,22 +47,43 @@ export const useEventStocks = (eventId, eventTime) => {
|
||||
// 加载状态
|
||||
const loading = useSelector(state => state.stock.loading, shallowEqual);
|
||||
|
||||
// 加载所有数据
|
||||
// 拆分加载函数 - 相关股票数据
|
||||
const loadStocksData = useCallback(() => {
|
||||
if (!eventId) return;
|
||||
logger.debug('useEventStocks', '加载股票数据', { eventId });
|
||||
dispatch(fetchEventStocks({ eventId }));
|
||||
}, [dispatch, eventId]);
|
||||
|
||||
// 拆分加载函数 - 历史事件数据
|
||||
const loadHistoricalData = useCallback(() => {
|
||||
if (!eventId) return;
|
||||
logger.debug('useEventStocks', '加载历史事件数据', { eventId });
|
||||
dispatch(fetchHistoricalEvents({ eventId }));
|
||||
dispatch(fetchExpectationScore({ eventId }));
|
||||
}, [dispatch, eventId]);
|
||||
|
||||
// 拆分加载函数 - 传导链分析数据
|
||||
const loadChainAnalysis = useCallback(() => {
|
||||
if (!eventId) return;
|
||||
logger.debug('useEventStocks', '加载传导链数据', { eventId });
|
||||
dispatch(fetchChainAnalysis({ eventId }));
|
||||
}, [dispatch, eventId]);
|
||||
|
||||
// 加载所有数据(保留用于兼容性)
|
||||
const loadAllData = useCallback(() => {
|
||||
if (!eventId) {
|
||||
logger.warn('useEventStocks', 'eventId 为空,跳过数据加载');
|
||||
return;
|
||||
}
|
||||
|
||||
logger.debug('useEventStocks', '开始加载事件数据', { eventId });
|
||||
logger.debug('useEventStocks', '开始加载事件所有数据', { eventId });
|
||||
|
||||
// 并发加载所有数据
|
||||
dispatch(fetchEventStocks({ eventId }));
|
||||
dispatch(fetchEventDetail({ eventId }));
|
||||
dispatch(fetchHistoricalEvents({ eventId }));
|
||||
dispatch(fetchChainAnalysis({ eventId }));
|
||||
dispatch(fetchExpectationScore({ eventId }));
|
||||
}, [dispatch, eventId]);
|
||||
loadStocksData();
|
||||
loadHistoricalData();
|
||||
loadChainAnalysis();
|
||||
}, [dispatch, eventId, loadStocksData, loadHistoricalData, loadChainAnalysis]);
|
||||
|
||||
// 强制刷新所有数据
|
||||
const refreshAllData = useCallback(() => {
|
||||
@@ -88,12 +111,16 @@ export const useEventStocks = (eventId, eventTime) => {
|
||||
dispatch(fetchStockQuotes({ codes, eventTime }));
|
||||
}, [dispatch, stocks, eventTime]);
|
||||
|
||||
// 自动加载事件数据
|
||||
// 自动加载事件数据(可通过 autoLoad 参数控制)
|
||||
useEffect(() => {
|
||||
if (eventId) {
|
||||
if (eventId && autoLoad) {
|
||||
logger.debug('useEventStocks', '自动加载已启用,加载所有数据', { eventId, autoLoad });
|
||||
loadAllData();
|
||||
} else if (eventId && !autoLoad) {
|
||||
logger.debug('useEventStocks', '自动加载已禁用,等待手动触发', { eventId, autoLoad });
|
||||
// 禁用自动加载时,不加载任何数据
|
||||
}
|
||||
}, [eventId]); // 修复:只依赖 eventId,避免无限循环
|
||||
}, [eventId, autoLoad, loadAllData]); // 添加 loadAllData 依赖
|
||||
|
||||
// 自动加载行情数据
|
||||
useEffect(() => {
|
||||
@@ -131,6 +158,9 @@ export const useEventStocks = (eventId, eventTime) => {
|
||||
|
||||
// 方法
|
||||
loadAllData,
|
||||
loadStocksData, // 新增:加载股票数据
|
||||
loadHistoricalData, // 新增:加载历史事件数据
|
||||
loadChainAnalysis, // 新增:加载传导链数据(重命名避免冲突)
|
||||
refreshAllData,
|
||||
refreshQuotes
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user