fix(cli): prevent infinite re-render loop by adding dependency arrays to useEffect hooks in useFlickerDetector and useSessionResume (#23752)

This commit is contained in:
mkorwel
2026-03-26 14:50:29 -07:00
parent d25ce0e143
commit b0b2f3c637
3 changed files with 7 additions and 5 deletions
@@ -106,14 +106,16 @@ describe('useFlickerDetector', () => {
it('should re-evaluate on re-render', async () => {
// Start with a valid height
mockMeasureElement.mockReturnValue({ width: 80, height: 20 });
const { rerender } = await renderHook(() =>
useFlickerDetector(mockRef, 25),
const { rerender } = await renderHook(
({ height }) => useFlickerDetector(mockRef, height),
{ initialProps: { height: 25 } },
);
expect(mockRecordFlickerFrame).not.toHaveBeenCalled();
// Now, simulate a re-render where the height is too great
mockMeasureElement.mockReturnValue({ width: 80, height: 30 });
rerender();
// Trigger a change in terminalHeight dependency to force effect to run
rerender({ height: 24 });
expect(mockRecordFlickerFrame).toHaveBeenCalledTimes(1);
expect(mockAppEventsEmit).toHaveBeenCalledTimes(1);
@@ -39,5 +39,5 @@ export function useFlickerDetector(
appEvents.emit(AppEvent.Flicker);
}
}
});
}, [rootUiRef, terminalHeight, config, constrainHeight]);
}
@@ -49,7 +49,7 @@ export function useSessionResume({
useEffect(() => {
historyManagerRef.current = historyManager;
refreshStaticRef.current = refreshStatic;
});
}, [historyManager, refreshStatic]);
const loadHistoryForResume = useCallback(
async (