diff --git a/src/views/Community/components/CompactSearchBox.js b/src/views/Community/components/CompactSearchBox.js index 95dc54c1..c15c6f86 100644 --- a/src/views/Community/components/CompactSearchBox.js +++ b/src/views/Community/components/CompactSearchBox.js @@ -14,6 +14,7 @@ import dayjs from 'dayjs'; import debounce from 'lodash/debounce'; import { useSelector, useDispatch } from 'react-redux'; import { fetchIndustryData, selectIndustryData, selectIndustryLoading } from '@store/slices/industrySlice'; +import { loadAllStocks } from '@store/slices/stockSlice'; import { stockService } from '@services/stockService'; import { logger } from '@utils/logger'; import TradingTimeFilter from './TradingTimeFilter'; @@ -61,6 +62,7 @@ const CompactSearchBox = ({ const dispatch = useDispatch(); const industryData = useSelector(selectIndustryData); const industryLoading = useSelector(selectIndustryLoading); + const reduxAllStocks = useSelector((state) => state.stock.allStocks); // 防抖搜索 const debouncedSearchRef = useRef(null); @@ -82,16 +84,19 @@ const CompactSearchBox = ({ }; }, [triggerSearch]); - // 加载股票数据 + // 加载股票数据(从 Redux 获取) useEffect(() => { - const loadStocks = async () => { - const response = await stockService.getAllStocks(); - if (response.success && response.data) { - setAllStocks(response.data); - } - }; - loadStocks(); - }, []); + if (!reduxAllStocks || reduxAllStocks.length === 0) { + dispatch(loadAllStocks()); + } + }, [dispatch, reduxAllStocks]); + + // 同步 Redux 数据到本地状态 + useEffect(() => { + if (reduxAllStocks && reduxAllStocks.length > 0) { + setAllStocks(reduxAllStocks); + } + }, [reduxAllStocks]); // 预加载行业数据(解决第一次点击无数据问题) useEffect(() => { diff --git a/src/views/Community/components/StockDetailPanel/hooks/useWatchlist.js b/src/views/Community/components/StockDetailPanel/hooks/useWatchlist.js index 92e7c031..41aa38d7 100644 --- a/src/views/Community/components/StockDetailPanel/hooks/useWatchlist.js +++ b/src/views/Community/components/StockDetailPanel/hooks/useWatchlist.js @@ -1,9 +1,9 @@ // src/views/Community/components/StockDetailPanel/hooks/useWatchlist.js import { useSelector, useDispatch, shallowEqual } from 'react-redux'; import { useEffect, useCallback, useMemo } from 'react'; -import { loadWatchlist, toggleWatchlist as toggleWatchlistAction } from '../../../../../store/slices/stockSlice'; +import { loadWatchlist, toggleWatchlist as toggleWatchlistAction } from '@store/slices/stockSlice'; import { message } from 'antd'; -import { logger } from '../../../../../utils/logger'; +import { logger } from '@utils/logger'; /** * 标准化股票代码为6位格式 @@ -41,8 +41,9 @@ export const useWatchlist = (shouldLoad = true) => { const loading = useSelector(state => state.stock.loading.watchlist); // 转换为 Set 方便快速查询(标准化为6位代码) + // 注意: watchlistArray 现在是 { stock_code, stock_name }[] 格式 const watchlistSet = useMemo(() => { - return new Set(watchlistArray.map(normalizeStockCode)); + return new Set(watchlistArray.map(item => normalizeStockCode(item.stock_code))); }, [watchlistArray]); // 初始化时加载自选股列表(只在 shouldLoad 为 true 时) diff --git a/src/views/Dashboard/Center.js b/src/views/Dashboard/Center.js index 8a815551..3e34c48e 100644 --- a/src/views/Dashboard/Center.js +++ b/src/views/Dashboard/Center.js @@ -321,7 +321,7 @@ export default function CenterDashboard() { {watchlist.slice(0, 10).map((stock) => ( {comment.content} - - + + {formatDate(comment.created_at)} {comment.event_title && ( - - {comment.event_title.slice(0, 20)}... + + {comment.event_title} )}