diff --git a/frontend/app/trades/page.tsx b/frontend/app/trades/page.tsx
index 304dc84..9de64a9 100644
--- a/frontend/app/trades/page.tsx
+++ b/frontend/app/trades/page.tsx
@@ -56,19 +56,29 @@ function timeStr(ms: number) {
function LiveTrades({ symbol }: { symbol: Symbol }) {
const [trades, setTrades] = useState([]);
const [loading, setLoading] = useState(true);
+ const containerRef = useRef(null);
+ const lastAggId = useRef(0);
useEffect(() => {
let running = true;
+ // 重置
+ setTrades([]);
+ setLoading(true);
+ lastAggId.current = 0;
+
const fetch = async () => {
try {
const res = await authFetch(`/api/trades/latest?symbol=${symbol}&limit=30`);
if (!res.ok) return;
const data = await res.json();
if (!running) return;
+ const incoming: TradeRow[] = (data.data || []).reverse(); // 改为时间升序
setTrades(prev => {
const existingIds = new Set(prev.map((t: TradeRow) => t.agg_id));
- const newOnes = (data.data || []).filter((t: TradeRow) => !existingIds.has(t.agg_id));
- return [...newOnes, ...prev].slice(0, 60);
+ const newOnes = incoming.filter((t: TradeRow) => !existingIds.has(t.agg_id));
+ if (newOnes.length === 0) return prev;
+ // 追加到末尾,保持时间升序,最多保留120条
+ return [...prev, ...newOnes].slice(-120);
});
setLoading(false);
} catch {}
@@ -93,7 +103,7 @@ function LiveTrades({ symbol }: { symbol: Symbol }) {
▼ 红=主动卖(空方发动)
-
+
{loading ? (
加载中...
) : (