From 22c5c166bf4ff0f4f92118e39b23d3a0f8e90f43 Mon Sep 17 00:00:00 2001 From: zzlgreat Date: Mon, 22 Dec 2025 15:48:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0Company=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=9A=84UI=E4=B8=BAFUI=E9=A3=8E=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layouts/MainlineTimelineView.js | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/views/Community/components/DynamicNews/layouts/MainlineTimelineView.js b/src/views/Community/components/DynamicNews/layouts/MainlineTimelineView.js index 1d70855b..cefeafba 100644 --- a/src/views/Community/components/DynamicNews/layouts/MainlineTimelineView.js +++ b/src/views/Community/components/DynamicNews/layouts/MainlineTimelineView.js @@ -459,6 +459,25 @@ const MainlineTimelineViewComponent = forwardRef( [mainlineData] ); + // 根据排序方式排序主线列表(必须在条件渲染之前,遵循 Hooks 规则) + const sortedMainlines = useMemo(() => { + const rawMainlines = mainlineData?.mainlines; + if (!rawMainlines) return []; + const sorted = [...rawMainlines]; + switch (sortBy) { + case "change_desc": + // 按涨跌幅从高到低(涨幅大的在前) + return sorted.sort((a, b) => (b.avg_change_pct ?? -999) - (a.avg_change_pct ?? -999)); + case "change_asc": + // 按涨跌幅从低到高(跌幅大的在前) + return sorted.sort((a, b) => (a.avg_change_pct ?? 999) - (b.avg_change_pct ?? 999)); + case "event_count": + default: + // 按事件数量从多到少 + return sorted.sort((a, b) => b.event_count - a.event_count); + } + }, [mainlineData?.mainlines, sortBy]); + // 渲染加载状态 if (loading) { return ( @@ -510,29 +529,13 @@ const MainlineTimelineViewComponent = forwardRef( } const { - mainlines: rawMainlines, total_events, mainline_count, ungrouped_count, } = mainlineData; - // 根据排序方式排序主线列表 - const mainlines = useMemo(() => { - if (!rawMainlines) return []; - const sorted = [...rawMainlines]; - switch (sortBy) { - case "change_desc": - // 按涨跌幅从高到低(涨幅大的在前) - return sorted.sort((a, b) => (b.avg_change_pct ?? -999) - (a.avg_change_pct ?? -999)); - case "change_asc": - // 按涨跌幅从低到高(跌幅大的在前) - return sorted.sort((a, b) => (a.avg_change_pct ?? 999) - (b.avg_change_pct ?? 999)); - case "event_count": - default: - // 按事件数量从多到少 - return sorted.sort((a, b) => b.event_count - a.event_count); - } - }, [rawMainlines, sortBy]); + // 使用排序后的主线列表 + const mainlines = sortedMainlines; return (