From 351c5600b869d91d6680d21feb893fcdfbeb336a Mon Sep 17 00:00:00 2001 From: Macbook Date: Mon, 22 Jun 2026 17:46:16 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8D=B0=EC=8A=A4=ED=81=AC=ED=86=B1=20?= =?UTF-8?q?=EC=95=B1=20=EC=8B=A4=EC=8B=9C=EA=B0=84=20=EC=B0=A8=ED=8A=B8=20?= =?UTF-8?q?=EB=A6=AC=ED=94=84=EB=A0=88=EC=8B=9C=20=EB=AC=B4=ED=95=9C?= =?UTF-8?q?=EB=A1=9C=EB=94=A9=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/chart/useChartWorkspace.ts | 8 ++++++++ frontend/src/components/TradingChart.tsx | 9 ++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/frontend/src/chart/useChartWorkspace.ts b/frontend/src/chart/useChartWorkspace.ts index 4da94ea..c2143c9 100644 --- a/frontend/src/chart/useChartWorkspace.ts +++ b/frontend/src/chart/useChartWorkspace.ts @@ -1219,6 +1219,14 @@ export function useChartWorkspace({ setSingleChartPaintReady(false); }, [symbol, timeframe]); + /** 타이틀바 refresh — 실시간 틱·paint 게이트 초기화 (symbol 전환과 동일) */ + useLayoutEffect(() => { + if (chartRefreshToken === 0) return; + chartLiveReadyRef.current = false; + pendingRealtimeBarRef.current = null; + setSingleChartPaintReady(false); + }, [chartRefreshToken]); + useEffect(() => { slotPaintReadyRef.current = {}; setSlotPaintEpoch(v => v + 1); diff --git a/frontend/src/components/TradingChart.tsx b/frontend/src/components/TradingChart.tsx index ba709ca..b5948ad 100644 --- a/frontend/src/components/TradingChart.tsx +++ b/frontend/src/components/TradingChart.tsx @@ -407,7 +407,14 @@ const TradingChart: React.FC = ({ }, [chartVisible]); useEffect(() => { - if (dataLoading) setChartPaintReady(false); + if (!dataLoading) return; + setChartPaintReady(false); + // refresh 후 동일 barsKey면 reloadAll이 스킵되어 paint가 영구 false — 키 초기화 + prevBarsKey.current = ''; + prevIndKey.current = ''; + reloadGenRef.current += 1; + reloadInFlightRef.current = false; + reloadCoalesceRef.current = false; }, [dataLoading]); useEffect(() => {