Politur: Reheat-Schleifen bei Mausbewegungen in GraphView behoben (D3-Simulation stabilisiert)

This commit is contained in:
Hitonabi
2026-07-09 12:46:07 +02:00
parent 1983d70805
commit c0586c3fad
4 changed files with 16 additions and 18 deletions
+6 -8
View File
@@ -94,7 +94,8 @@ export function GraphView({ data, selectedNodeId, onNodeSelect }: {
}[category] || 0
}
// D3 Force Engine tunen (Luftige Struktur, kein Überlappen, Clustering)
// D3 Force Engine initialisieren NUR wenn sich die Daten tatsächlich ändern!
// Entfernt hovered/selectedNodeId aus den Dependencies, um Reheat-Zucken und CPU-Spikes bei Mausbewegung zu eliminieren.
useEffect(() => {
const fg = fgRef.current
if (!fg) return
@@ -110,19 +111,16 @@ export function GraphView({ data, selectedNodeId, onNodeSelect }: {
const charge = fg.d3Force("charge")
if (charge) charge.strength(-380)
// 4. Kollisionskraft (Sicherer Radius, verhindert Überlappung)
fg.d3Force("collide", forceCollide().radius((node: any) => {
const isLarge = node.id === hovered || node.id === selectedNodeId
return isLarge ? 50 : 25
}).iterations(2))
// 4. Konstanter, stabiler Kollisionsradius (verhindert Reheat-Zucken bei Mausbewegung)
fg.d3Force("collide", forceCollide().radius(28).iterations(2))
// 5. Federkraft (Links)
const link = fg.d3Force("link")
if (link) link.distance(85)
// Simulation neu starten (Reheat)
// Simulation einmalig heiss starten für die neuen Daten
fg.d3ReheatSimulation()
}, [graphData, hovered, selectedNodeId])
}, [graphData])
const activeNode = hovered || selectedNodeId