diff --git a/frontend/app/trades/page.tsx b/frontend/app/trades/page.tsx index 9de64a9..a300bba 100644 --- a/frontend/app/trades/page.tsx +++ b/frontend/app/trades/page.tsx @@ -1,6 +1,6 @@ "use client"; -import { useEffect, useState, useRef, useCallback } from "react"; +import { useEffect, useState, useCallback } from "react"; import { authFetch } from "@/lib/auth"; import { useAuth } from "@/lib/auth"; import Link from "next/link"; @@ -56,29 +56,25 @@ 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`); + const res = await authFetch(`/api/trades/latest?symbol=${symbol}&limit=40`); if (!res.ok) return; const data = await res.json(); if (!running) return; - const incoming: TradeRow[] = (data.data || []).reverse(); // 改为时间升序 + const incoming: TradeRow[] = data.data || []; setTrades(prev => { const existingIds = new Set(prev.map((t: TradeRow) => t.agg_id)); const newOnes = incoming.filter((t: TradeRow) => !existingIds.has(t.agg_id)); if (newOnes.length === 0) return prev; - // 追加到末尾,保持时间升序,最多保留120条 - return [...prev, ...newOnes].slice(-120); + // 最新在顶部,最多保留50条 + return [...newOnes, ...prev].slice(0, 50); }); setLoading(false); } catch {} @@ -103,7 +99,8 @@ function LiveTrades({ symbol }: { symbol: Symbol }) { ▼ 红=主动卖(空方发动)

-
+ {/* 固定高度容器,内部自己滚动,不影响页面 */} +
{loading ? (
加载中...
) : (