fix(perf): remove projectTabs from useEffect deps to fix re-render loop (#362)
The projectTabs array was being included in the useEffect dependency array, but since it's computed fresh on every render (via getProjectTabs()), it always has a new reference. This caused the effect to fire on every render cycle, creating an infinite re-render loop. Fix: Use openProjectIds.includes() instead of projectTabs.some() since openProjectIds is stable state and already tracks the same information. Fixes performance regression in beta.10 where UI interactions took 5-6 seconds. Co-authored-by: Andy <119136210+AndyMik90@users.noreply.github.com>
This commit is contained in:
@@ -157,7 +157,9 @@ export function App() {
|
||||
}
|
||||
console.log('[App] Tabs already persisted, checking active project');
|
||||
// If there's an active project but no tabs open for it, open a tab
|
||||
if (activeProjectId && !projectTabs.some(tab => tab.id === activeProjectId)) {
|
||||
// Note: Use openProjectIds instead of projectTabs to avoid re-render loop
|
||||
// (projectTabs creates a new array on every render)
|
||||
if (activeProjectId && !openProjectIds.includes(activeProjectId)) {
|
||||
console.log('[App] Active project has no tab, opening:', activeProjectId);
|
||||
openProjectTab(activeProjectId);
|
||||
}
|
||||
@@ -170,7 +172,7 @@ export function App() {
|
||||
console.log('[App] Tab state is valid, no action needed');
|
||||
}
|
||||
}
|
||||
}, [projects, activeProjectId, selectedProjectId, openProjectIds, projectTabs, openProjectTab, setActiveProject]);
|
||||
}, [projects, activeProjectId, selectedProjectId, openProjectIds, openProjectTab, setActiveProject]);
|
||||
|
||||
// Track if settings have been loaded at least once
|
||||
const [settingsHaveLoaded, setSettingsHaveLoaded] = useState(false);
|
||||
|
||||
Reference in New Issue
Block a user